我试图在委托方法中触发自定义委托方法 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath。一切看起来都很好,除了我从未达到我的自定义委托方法,应该通过点击一行来触发。 这是我的授权实施:
@class SettingsList; @protocol SettingsListDelegate - (void) retrieveSettings:(SettingsList*)tableController Nazov:(NSString*)Nazov; @end @interface SettingsList : UITableViewController { id delegate; } @property (nonatomic, assign) id delegate; @end @synthesize delegate; - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString *Nazov = [NSString stringWithString:[[self displayedObjects] objectAtIndex:indexPath.row]]; NSLog(@"Vybral som %@", Nazov); [delegate retrieveSettings:self Nazov:Nazov]; }
委托的属性定义是正确的,但由于<>而在此网站上不可见它正在作为标签。
在第二节课就像这样
@interface ShakeControl : UIViewController - (void) retrieveSettings:(SettingsList*)tableController Nazov:(NSString*)Nazov{ }
但在这种情况下从未实际达到过它。不知道出了什么问题,因为之前曾多次委托并且工作正常,现在已经坚持了几个小时...任何帮助,将不胜感激 ..thanks
答案 0 :(得分:3)
你应该这样做: 在标题中:
@protocol SomeControllerDelegate <NSObject>
@optional
- (void) somethingSelected: (Anything *)selection;
@end
@interface SomeController : UITableViewController
{
id <SomeControllerDelegate> delegate;
}
@property (nonatomic, retain) id<SomeControllerDelegate> delegate;
在代码中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.delegate somethingSelected:(Anything *)data];
}
在另一个类中 - 添加到定义:
@interface ShakeControl : UIViewController <SomeControllerDelegate>