【发布时间】:2011-04-14 22:39:38
【问题描述】:
也许我试图以错误的方式解决这个问题......
在我的主视图控制器中,我有三个按钮。 每个按钮都会导致加载不同的 UIViewController 及其 nib。
我使用单一方法来处理按钮触摸:
-(IBAction)touched_menu_button:(id)sender
{
SEL selector;
UIButton *button = (UIButton *)sender;
switch (button.tag)
{
case 0:
selector = @selector(ShowA:finished:context:);
break;
case 1:
selector = @selector(ShowB:finished:context:);
break;
case 2:
selector = @selector(ShowC:finished:context:);
break;
default:
selector = @selector(ShowA:finished:context:);
break;
}
[self FadeOut:selector];
}
这里发生的情况是,在实际显示新视图之前,我正在运行一个小动画。我使用选择器调用“FadeOut”,该选择器将调用动画完成后将显示适当视图的方法。这工作正常。选择器调用的例程如下所示:
-(void)ShowA:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
A_ViewController *mvc = [[[A_ViewController alloc] init] autorelease];
mvc.delegate = self;
[self presentModalViewController:mvc animated:FALSE];
}
这也很好用。
我想做的是将它简化为由选择器调用的单个方法,并将所有冗余代码放在我的“touched_menu_button”方法中。回调函数如下所示:
-(void)ShowNewView:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
[self presentModalViewController:mvc animated:FALSE];
}
显然,这需要在“mvc”中传递不同的 UIViewController 子类,具体取决于我要显示的视图。这就是我遇到麻烦的地方。也许是因为我已经连续编程了 12 个小时,而且我精神崩溃了,但我似乎无法弄清楚如何做到这一点。我尝试将类变量定义为 void 、void *、id、UIViewController * 和 UIViewController **。由于某种原因,我似乎无法让它工作。
我应该注意到,许多方法确实有效,但是,当视图被关闭并发生自动释放过程时,它们会遇到麻烦。在我尝试过的所有排列中,我似乎未能将指针的地址传递给 UITableView 子类。我现在唯一能确定的选项真的很丑。
【问题讨论】:
标签: iphone pointers uiviewcontroller