我正在构建一个带有故事板的iPad应用程序。我有一个“数据页面”(视图),我在其中放置了一个包含数据的tableview的大容器。然后我上面有3个小容器,也有tableviews,那些应该过滤大容器上的数据。在IB中连接所有带有嵌入segues的tableviews。在视觉上,它已经构建了我需要的内容,所有表格都显示内容。到目前为止一切顺利。
现在的通信部分:对于每个“过滤器tableview”,我实现了一个协议方法和委托属性,并将“数据”容器tableview控制器符合它。但不知怎的,方法没有被调用。我尝试在过滤器tableview控制器中设置[self setDelegate:self],但是使用“:unrecognized selector sent to instance”崩溃应用程序
这不是我的第一个委托协议,在我的其他(工作)情况下,我以编程方式实例化视图,并需要将委托设置为该视图。怎么在这里完成???
以下问题是:为了使我的数据容器视图控制器符合3个代表,我只设置了3个不同的类型id属性? (意思是,以不同方式称呼它们?)
任何提示都非常感谢!
编辑:添加了代码。 [filter:selection:]没有被调用...没有NSLogs ..
// MainDataViewController.h
@interface MainDataViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource,FilterDelegate>
-(void)filter:(Object *)filterObject selecting:(BOOL)selection;
@end
// MainDataViewController.m
#import "MainDataViewController.h"
#import "FilterViewController.h"
@interface MainDataViewController ()
@end
@implementation MainDataViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
}
- (void)filter:(Object *)filterObject selecting:(BOOL)selection;
{
NSLog(@"test");
NSLog(@"selection object: %@", filterObject);
}
@end
// FilterViewController.h
@protocol FilterDelegate <NSObject>
- (void)filter:(Object *)filterObject selecting:(BOOL)selection;
@end
@interface FilterViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, weak) id <FilterDelegate> delegate;
@end
// FilterViewController.m
#import "FilterViewController.h"
@interface FilterViewController ()
@end
@implementation FilterViewController
@synthesize delegate;
- (void)viewDidLoad
{
[super viewDidLoad];
[self setDelegate:self];
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
}
[self.delegate filter:object selecting:YES];
}
答案 0 :(得分:0)
[self setDelegate:self]
看起来不正确。我认为它看起来应该更像:
[self.filter1TableView setDelegate:self];
[self.filter2TableView setDelegate:self];
[self.filter3TableView setDelegate:self];
答案 1 :(得分:0)
我最终删除了containerViews并展示了popovers。委托协议按预期工作。非常好奇我做错了什么..我猜它与嵌入式视图的parentView有关...?