2010-09-08 59 views
2

我有一个小小的怀疑。我有一个NSObject类,我试图显示一个警报视图。所以当我点击确定按钮时显示警告视图后,我想将导航控制器推入堆栈。我可以从普通NSObject类中推导航控制器吗?请让我知道您的时间guys..thanks ..UIAlertView问题

这是代码..

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

} 

我创建了一个名为类型的UINavigationController的navigationController属性,当我赶上了错误我显示警报视图和我正在使用上述方法来推视图控制器,但它不起作用。

回答

3

是和不是...取决于你如何设置你的应用程序。要将视图推到导航堆栈上,您需要有一个导航控制器

您的NSObject是否可以访问此导航控制器 - 您可能必须设置一个委托方法,该方法在警报视图委托在您的NSObject中被调用时从委托视图中调用。

我只是想知道为什么你在NSObject中显示UIAlertView,为什么不在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]; 
} 

那么你的视图控制器的.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]; 
} 

多数民众赞成我该怎么做 - 因为我不太确定我明白你的要求。 :)这些都是我的头顶 - 所以不要把它写成信件,但你有基础开始。你可以建立它。查看@协议和委托方法,它的全部内容。 :)

+0

感谢您的答复thomas..I使用服务和服务是一个NSObject类..因此,无论何时我遇到服务错误我显示警报视图..我在NSObject类中使用了alertview的clickedButtonAtIndex方法,但我不知道如何从这种方法推动导航控制器..可以请你帮我关于这个..如果可能请你张贴一个示例代码.. – racharambola 2010-09-08 20:55:38

+0

我不确定你的真正含义。您可能需要自己发布一些代码才能帮助您。不过,我建议你只是创建一个gts在'clickedButtonAtIndex'中调用的委托方法。我会用一个例子更新我的文章... – 2010-09-08 23:32:56

+0

谢谢托马斯..我会试一试..我包括一些代码..请看看它,如果你有一些时间..再次感谢您的时间 – racharambola 2010-09-09 00:21:21