我正在为splitView
申请iPad
申请。我已经实现了一个名为UIButton
的{{1}}。点击它后,Upload
内会显示UITableView
。点击任何内容后,我想在UIPoverController
的{{1}}中显示一些相应的网站。为此,我实施了UIwebView
。我在UIDetailView
file ::
delegate method protocol
在相应的UploadTableViewController.h
文件中,我使用了以下代码行::
@protocol UploadTableViewDelegate <NSObject>
@required
- (void)selected:(NSString *)his;
@end
@interface UploadSpaceTableViewController : UITableViewController{
id<UploadSpaceTableViewDelegate> delegate;
}
@property (retain) id delegate;
@end
在我已实现函数.m
的类的- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (delegate != nil) {
NSString *hisSelected = [keys objectAtIndex:indexPath.row];
NSLog(@"%@ lolwa", hisSelected);
[delegate selected:hisSelected];
}
}
文件中,代码为::
.m
但是,我无法在gdb中获取Selected
(在函数- (void)selected:(NSString *)Key {
NSLog(@"hello");
[self.UploadSpaceTableViewPopover dismissPopoverAnimated:YES];
}
-(IBAction)uploadpressed:(id)sender{
Upload.delegate = self;
self.Upload = [[UploadSpaceTableViewController alloc]
initWithStyle:UITableViewStylePlain];
self.UploadTableViewPopover = [[UIPopoverController alloc]
initWithContentViewController:UploadSpace];
[self.UploadTableViewPopover presentPopoverFromBarButtonItem:sender
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
中编写)hello
。这是我第一次使用此Selected
。我无法解决这个问题。有人可以帮我吗 ?谢谢和问候。
答案 0 :(得分:5)
[delegate keySelected:hisKeySelected];
是您的第一个问题。您没有声明名为-keySelected:
的委托方法,而是声明名为-Selected:
的委托方法。
您的第二个问题是您绝对不是表格视图的代表。为了调用-didSelectRowAtIndexPath:
之类的委托方法,您必须是表的委托。
PS,不要用大写字母开始实例或方法名称。在ObjC中,大写字母表示一个类。
编辑:这就是您的UploadSpaceTableViewController
标题应该是这样的:
@protocol UploadTableViewDelegate <NSObject>
@required
- (void)selected:(NSString *)his;
@end
@interface UploadSpaceTableViewController : UITableViewController<UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, assign) id <UploadSpaceTableViewDelegate>delegate; //delegates are weak!!!
@end
而.m,我会跳过很多不必要的东西:
-(void)viewDidLoad {
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
}
//other code
此外,您的委托被声明为retain,这在ObjC中是绝对的No-No。如果使用ARC,则声明为弱,如果不使用则声明为。
通过在明确拥有或初始化对象之前设置它,您还在-uploadPressed:
方法中生成了一个nil委托。以下是它的外观:
self.Upload = [[UploadSpaceTableViewController alloc]initWithStyle:UITableViewStylePlain];
Upload.delegate = self;
答案 1 :(得分:3)
代表团的工作方式如下
在您希望成为委托的类中,说它符合protocoll
@interface MyClass : MySuperClass <UploadTableViewDelegate>
设置委托属性,以便委托类可以获取委托消息
uploadSpaceTVC.delegate = self;
调用非委托类(UploadSpaceTableViewController
)
[self.delegate selected:@"test"];