UIAlertView Вопрос - PullRequest
       12

UIAlertView Вопрос

2 голосов
/ 09 сентября 2010

У меня есть небольшое сомнение.У меня есть класс NSObject, где я пытаюсь отобразить представление предупреждений.Таким образом, после отображения окна с предупреждением, когда я нажимаю кнопку ОК, я хочу поместить контроллер навигации в стек.Могу ли я выдвинуть контроллер навигации из общего класса NSObject?Пожалуйста, дайте мне знать, ребята .. спасибо за ваше время ..

Это код ..

- (void) alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex{    
  SettingsViewController *homeView = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
    [self.navigationController pushViewController:homeView animated:NO];
    [homeView release];

}

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

1 Ответ

3 голосов
/ 09 сентября 2010

Да и нет ... в зависимости от того, как настроено ваше приложение. Для перемещения представлений в стек навигации вам необходим контроллер навигации .

Имеет ли ваш NSObject доступ к этому контроллеру навигации - вам, возможно, придется настроить метод делегата, который вызывается из вашего представления делегата, когда делегат представления оповещения вызывается в вашем NSObject.

Мне просто интересно, почему вы отображаете UIAlertView в NSObject, почему вы не отображаете его в UIView или UIViewController?

CustomObject.h

@protocol CustomObjectDelegate<NSObject>
@optional
- (void)customObjectAlertViewDidClickOk;
@end

@interface CustomObject : NSObject <UIAlertViewDelegate>{
    id<CustomObjectDelegate> delegate;
}
@property (nonatomic, assign) id<CustomObjectDelegate> delegate;
@end;

CustomObject.m

@synthesize delegate;
// then put this:
- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    [delegate customObjectAlertViewDidClickOk];
}

Тогда ваш файл ViewController .h должен включать пользовательский объект и назначить методы делегата:

#include "CustomObject.h"
@interface MyViewController : UIViewController <CustomObjectDelegate> {

}
@end

и .m viewDidLoad (или аналогичный):

- (void)viewDidLoad{
    CustomObject *obj = [[CustomObject alloc] init];
    [obj setDelegate:self];
}
- (void)customObjectAlertViewDidClickOk{
    AnotherViewController *page = [[AnotherViewController alloc] initWithNibName:nil bundles:nil];
    [self.navigationController pushViewController:page];
}

Вот как бы я это сделал - учитывая, что я не слишком уверен, что понимаю, что вы спрашиваете. :) Это все от моей головы тоже - так что не принимайте это буква за буквой, но у вас есть основа для начала. Вы можете основываться на этом. Посмотрите @protocols и делегируйте методы, все там. :)

...