我已经尝试实施这个协议几个小时了,但由于某种原因它似乎不起作用。基本上我有一个拆分视图,它有一个视图控制器和一个表控制器,一个类将这两者结合在一起。主类创建表的一个实例并完美运行,但如果我选择一个单元格,我希望视图控制器做出反应。因此,我想创建一个协议,以便在选择表单元时会在主类中执行某些操作。
TableSplitViewController,这是主类:
@interface TableSplitViewController : UIViewController <updateView>
{
ChildrenTableViewController *firstController;
IBOutlet UITableView *firstTable;
IBOutlet UITableViewCell *tablecell;
NSString *name;
}
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) IBOutlet UILabel *childnamelabel;
@end
这是 TableSplitViewController.m:
- (void)viewDidLoad
{
[super viewDidLoad];
if (firstController == nil) {
firstController = [[ChildrenTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
}
[firstTable setDataSource:firstController];
[firstTable setDelegate:firstController];
firstController.view = firstController.tableView;
// Do any additional setup after loading the view.
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"ShowChildrenDetails"]) {
ChildrenDetailViewController *detailViewController = [segue destinationViewController];
NSIndexPath *myIndexPath = [firstController.tableView indexPathForSelectedRow];
detailViewController.childrenDetailModel = [[NSArray alloc]
initWithObjects: [firstController.childname objectAtIndex:[firstController.index row]], nil];
}
}
- (void) setNameLabel:(NSString *)sender
{
// self.name = sender;
NSLog(@"ran");
}
这是 ChildrenTableViewController.h:
@protocol updateView <NSObject>
@required
- (void) setNameLabel:(NSString *)sender;
@end
@interface ChildrenTableViewController : UITableViewController
{
NSIndexPath *index;
id <updateView> delegate1;
}
@property (nonatomic, strong) NSMutableArray *childname;
@property (nonatomic, strong) NSIndexPath *index;
@property (retain) id delegate1;
@end
这是 ChildrenTableViewController.m 的关键部分:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[[self delegate1] setNameLabel:[self.childname objectAtIndex:[indexPath row]]];
NSLog(@"rannn");
正如您在最后一个代码中看到的那样,我正在尝试使用协议函数调用该方法。由于某种原因,它似乎不起作用,我已经输入了 NSLOG,它甚至根本没有运行 setNameLabel 方法。:( 将不胜感激提供的任何帮助 :)