私はこのプロトコルを数時間実装しようとしていますが、何らかの理由で機能していないようです。基本的に、私はビューコントローラーとテーブルコントローラーを持つ分割ビューを持っています。1つのクラスがこれら2つを一緒に保持します。メインクラスはテーブルのインスタンスを作成して完全に実行しますが、セルを選択した場合は、ViewControllerが反応するようにします。だから私はテーブルセルが選択されたときにそれがメインクラスで何かをするためのプロトコルを作成したかったのです。
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メソッドをまったく実行していません。:(提供された助けに感謝します:)