kam*_*hai 2 iphone xcode objective-c ipad ios
我正在splitView为我的申请工作iPad.我已经实现了一个UIButton名为Upload.点击它,a UITableView出现在UIPoverController.在点击任何内容,我想,以显示我的一些各自的网站UIwebView中UIDetailView.为此,我实施了一个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
Run Code Online (Sandbox Code Playgroud)
在相应的.m文件中,我使用了以下代码行::
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (delegate != nil) {
NSString *hisSelected = [keys objectAtIndex:indexPath.row];
NSLog(@"%@ lolwa", hisSelected);
[delegate selected:hisSelected];
}
}
Run Code Online (Sandbox Code Playgroud)
在.m我实现该函数的类文件中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];
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法在gdb中获取hello(在函数中编写Selected)NSLogged.这是我第一次使用它delegate method protocol.我无法解决这个问题.有人可以帮我吗 ?感谢致敬.
[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
Run Code Online (Sandbox Code Playgroud)
而.m,我会跳过很多不必要的东西:
-(void)viewDidLoad {
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
}
//other code
Run Code Online (Sandbox Code Playgroud)
此外,您的代表被宣布为保留,这是ObjC中的绝对否定.如果使用ARC,则声明为弱,如果不使用则声明为.
-uploadPressed:通过在显式拥有或初始化对象之前设置它,您还可以在方法中生成nil委托.这是它应该看起来的样子:
self.Upload = [[UploadSpaceTableViewController alloc]initWithStyle:UITableViewStylePlain];
Upload.delegate = self;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5326 次 |
| 最近记录: |