我有一个UITabBarController,它的一个标签上有一个UINavigationController。然后,UINavigationController将自定义UIViewController作为其主视图。
基于由自定义UIViewController中的按钮触发的IBAction,我将UITableView控制器推送到UINavigationController堆栈上,就像这样。 (注意:这些只是实际代码的片段)。
主UIViewController的头文件:
@interface ATMs : UIViewController <CLLocationManagerDelegate, NSFetchedResultsControllerDelegate, MKMapViewDelegate> {
}
- (IBAction) showLocationList;
@end
主UIViewController的实现文件:
@implementation ATMs
- (void)showLocationList {
LocationList *locationTableController = [[LocationList alloc] initWithNibName:@"LocationList" bundle:nil];
[self.navigationController pushViewController:locationTableController animated:YES];
[locationTableController release];
}
locationTableController
视图控制器为核心数据提取对象列表并将其显示在表上。当用户选择一行时,我希望发生以下事情:
locationTableController
,以便我的ATMs
视图控制器可见ATMs
中的方法,传入locationTableController
中点击的行所代表的对象我尝试使用[locationTableController setDelegate:self];
中showLocationList
的{{1}}位于我alloc
UITableViewController的下方,并将UITableViewDelegate
添加到ATMs
的标题中。
但是,当我执行上述操作时,出现构建错误,指出locationTableController
可能无法响应setDelegate
。
答案 0 :(得分:2)
简单来说,在不检查其余代码的情况下,您需要实例化UITableViewController并将其tableView(而不是TableViewController)委托设置为self。
然后你可以在你的ATM UIViewController中实现- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
,并在tableView中选择一行后调用它。
我还会根据下面的代码以模态方式呈现你的tableViewController,并将其声明为实例变量,以便在调用tableview委托方法时将其解除:
@class LocationList
@interface ATMs : UIViewController
{
LocationList *locationTableController
...
}
在您的实施中:
@implementation ATMs
...
- (void)showLocationList
{
locationTableController = [[LocationList alloc] initWithNibName:@"LocationList" bundle:nil];
locationTableController.tableView.delegate = self;
[self presentModalViewController:locationTableContrller animated:YES];
[locationTableController release];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[locationTableController dismissModalViewControllerAnimated:YES];
// Rest of your implementation code here
}
答案 1 :(得分:0)
这可以通过以下各种方法实现: -
但我认为最好的方法是创建自己的委托方法,并在LocationList中选择行时发送回调,以及您在ATM控制器上所需的数据