Calling a modal window from within a custom UITableViewCell
我有一个 UITableView,在其中我以以下方式创建了一个自定义 UITableViewCell:
1 2 3 | ItemCellController *cell = (ItemCellController *)[tableView dequeueReusableCellWithIdentifier:ContentListsCellIdentifier]; ... cell = [[[ItemCellController alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ContentListsCellIdentifier] autorelease]; |
我这样做是为了获得 touchesBegan 和 touchesEnded 事件(这样我就可以实现长触摸)。使用 NSLog 我可以看到使用以下代码从 touchesBegan 方法中正确调用了 longTouch:
1 | timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(longTouch:) userInfo:nil repeats:YES]; |
问题是我无法从 longTouch 方法中调用模式窗口。
我尝试了以下方法,但得到了 NSInvalidArgumentException -[ItemCellController navigationController]: unrecognized selector sent to instance error。
1 2 3 4 5 6 | AddItemController *addView = [[AddItemController alloc] initWithNibName:@"AddItemView" bundle:nil]; UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:addView]; controller.navigationBar.barStyle = UIBarStyleBlack; [[self navigationController] presentModalViewController:controller animated:YES]; [controller release]; |
所以问题是,如何从自定义 UITableViewCell 中调用模式窗口。
谢谢
有几种方法:
(1) 将
1 2 | UINavigationController* navController = [ /* alloc and init it */ ] [self.controller presentModalViewController:navController animated:YES]; |
(2) 您的应用程序委托对象可以有一个控制器属性,您可以从代码中的任何位置访问该属性。然后你可以做这样的事情:
1 2 3 | MyAppDelegate* myAppDelegate = [[UIApplication sharedApplication] delegate]; [myAppDelegate.controller presentModalViewController:navController animated:YES]; |
(3) 这个不太直接,但更灵活。您可以设置您的根控制器(您想要呈现模态视图的那个)以侦听某个通知,并从您的表格单元格中发布该通知。
从根控制器中调用的示例监听代码:
1 2 3 4 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showModal:) name:@"show modal" object:nil]; |
从表格单元格中调用的示例邮政编码:
1 2 3 4 | NSDictionary* userInfo = [ /* store a handle to your modal controller */ ]; [[NSNotificationCenter defaultCenter] postNotificationName:@"show modal" object:self userInfo:userInfo]; |
你的根控制器的
看起来你没有在任何地方设置单元格导航控制器,它似乎不喜欢 [[self navigationController] presentModalViewController:controller animated:YES];该行,检查"自我"对象上的 nagivationController 属性