Настраиваемое событие нажатия кнопки «Назад» на контроллере push-представления - PullRequest
0 голосов
/ 03 апреля 2010

Я нажал контроллер вида и загрузил WebView и пользовательскую прямоугольную закругленную кнопку в правом нижнем левом углу в вид, используя программный способ.

-(void)loadView {


        CGRect frame = CGRectMake(0.0, 0.0, 480, 320);
    WebView = [[[UIWebView alloc] initWithFrame:frame] autorelease];
    WebView.backgroundColor = [UIColor whiteColor];
    WebView.scalesPageToFit = YES;
    WebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin);
    WebView.autoresizesSubviews = YES; 
    WebView.exclusiveTouch = YES;

    WebView.clearsContextBeforeDrawing = YES;

 self.roundedButtonType = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
 self.roundedButtonType.frame = CGRectMake(416.0, 270.0, 44, 19);
 [self.roundedButtonType setTitle:@"Back" forState:UIControlStateNormal];
 self.roundedButtonType.backgroundColor = [UIColor grayColor];
 [self.roundedButtonType addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];

 self.view = WebView;

 [self.view addSubview: self.roundedButtonType ]; 
 [WebView release]; 


}

Это действие, которое я добавил как кнопку возврата навигации.

-(void)back:(id)sender{
 [self.navigationController popViewControllerAnimated:YES];
}

-(void)viewDidUnload{
 self.WebView = nil;
 self.roundedButtonType = nil;
}

-(void)dealloc{
 [roundedButtonType release];
 [super dealloc];
}

Здесь, при нажатии кнопки «Назад» отображается предыдущий вид, но приложение застревает в этом представлении, и GDB отображает полученный программой сигнал: сообщение EXC_BAD_ACCESS.

как решить эту проблему?

Спасибо

1 Ответ

0 голосов
/ 03 апреля 2010

У вас есть -autorelease 'd WebView здесь:

WebView = [[[UIWebView alloc] initWithFrame:frame] autorelease];

но тогда вы -release это снова!

 [self.view addSubview: self.roundedButtonType ]; 
 [WebView release]; 

Попробуйте удалить один из релизов.


Кроме того,

 self.roundedButtonType = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];

, если roundedButtonType не объявлено как @property(assign,...), вам не нужно отправлять сообщение -retain. И лучше назначить рамку, заголовок и т. Д. Перед присвоением self.roundedButtonType, потому что каждый вызов self.roundedButtonType не является бесплатным.

...