在带参数的标准方法中使用addSubView或presentModalViewController?

时间:2010-11-16 11:02:46

标签: objective-c cocoa-touch

我正在尝试重用代码,我有一些教程视图控制器/视图,我想从一个操作表中调用它。但是,调用视图是不同的。有时需要将教程视图添加为子视图,有时它们会被添加到导航控制器中。

如何扩展我的标准功能以满足这两种不同的情况?

你可以看到我必须做的事情,这意味着重复的代码:(

我有一个叫做标准代码的类,我想直接在这里添加对视图的调用。

-(void)showHelpClickButtonAtIndex:(int)buttonIndex:(UIView *)vw {
if (buttonIndex == CommonUIHelpPagesBtnIdx) {
    // do nothing
} else if (buttonIndex == 0) {
    NSLog(@"Tutorial here");
}
}

我在这样的一个视图中使用......

- (void)actionSheet:(UIActionSheet *)actionSheet 
      clickedButtonAtIndex:(NSInteger)buttonIndex {
CommonUI *cui = [CommonUI alloc];
[cui showHelpClickButtonAtIndex:buttonIndex:self.view];
[cui release];

if (buttonIndex == CommonUIHelpPagesBtnIdx) {
    UIViewController *theController = [[HelpViewController alloc] 
         initWithNibName:@"HelpView" 
         bundle:nil onPage:HelpPageCalcBalance];
    [self.navigationController.topViewController 
         presentModalViewController:theController animated:YES];
    [theController release];
   }
}

这是另一种观点......

- (void)actionSheet:(UIActionSheet *)actionSheet 
     clickedButtonAtIndex:(NSInteger)buttonIndex {
   [cui showHelpClickButtonAtIndex:buttonIndex:self.view];

   if (buttonIndex == CommonUIHelpPagesBtnIdx) {
        theController = [[HelpViewController alloc] initWithNibName:@"HelpView"                     
        bundle:nil onPage:HelpPageGettingStarted];

        [self.view addSubview:theController.view];
   }

}

1 个答案:

答案 0 :(得分:0)

也许actionSheets可以共享一个相同的委托,它将是一个根视图控制器或appDelegate根据它的当前状态知道该做什么。因此,在这两种情况下都将使用相同的actionSheet方法。

如果你把你的appDelegate总是作为actionSheetDelegate到达,你应该能够控制每一种呈现视图的方式,无论是模态还是不在你的任何视图+窗口中。

编辑(使用您的代码重新编辑):也许试试这个

MyAppDelegate.h:

@interface MyAppAppDelegate : NSObject <UIApplicationDelegate, UIActionSheetDelegate>
(...)

- (void) showHelp;

MyAppDelegate.m:

- (void) showHelp {
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"" 
                                                             delegate:self
                                                    cancelButtonTitle:@"Cancel" 
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles: @"Tutorial", @"Help Pages", nil];

    actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
    [actionSheet showInView:window];
    [actionSheet release];
}

- (void)actionSheet:(UIActionSheet *)actionSheet
clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == CommonUIHelpPagesBtnIdx) {
        UIViewController *theController = [HelpViewController alloc];
        if ([[self lvc] superview] != nil) {
            theController = [initWithNibName:@"HelpView"                     
                                      bundle:nil
                                      onPage:HelpPageGettingStarted];
            [window addSubview:theController.view];
        } else {
            theController = [initWithNibName:@"HelpView"
                                      bundle:nil
                                      onPage:HelpPageCalcBalance];
            UINavigationController * navController = [tabBarController selectedViewController];
            [navController.topViewController presentModalViewController:theController animated:YES];
        }
        [theController release];
    }
}

并在你的viewControllers中:

- (void)viewDidLoad {
    [super viewDidLoad];
    MyAppDelegate *delegate = (MyAppDelegate *) [[UIApplication sharedApplication] delegate];

    UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
    [infoButton addTarget:delegate
                   action:@selector(showHelp)
         forControlEvents:UIControlEventTouchUpInside];
     UIBarButtonItem *infoItem = [[UIBarButtonItem alloc] initWithCustomView:infoButton];
     self.navigationItem.rightBarButtonItem = infoItem;
     [infoItem release];
 }

没试过但它应该有用。