我正在用故事板构建iPad应用程序。我有一个“数据页面”(视图),我把一个包含数据的tableview放在一个大容器中。那么我有3个小容器,还有桌面,那些应该过滤大容器上的数据。在IB中,所有的tableviews都与embed segues相连接。从视觉上来说,它已经完全按照我需要的方式构建,所有表格都以内容显示。到现在为止还挺好。容器之间的通信,委托协议不起作用?
现在是通信部分:对于每个“过滤器tableview”我实现一个协议方法和委托属性,并将“数据”容器tableview控制器合并到它。但不知何故方法没有被调用。我试图在过滤器tableview控制器中设置[self setDelegate:self],但是使用“:无法识别的选择器发送到实例”崩溃应用程序。
这不是我的第一个委托协议,在我以编程方式实例化一个视图,并需要将代理设置为该视图。它是如何完成的?
下面的问题是:为了使我的数据容器视图控制器符合3委托,我只是设置3个不同类型的ID属性? (意思是,以不同的方式称呼它们?)
任何提示非常感谢!
编辑:添加代码。 [过滤器:选择:]不被称为...没有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];
}
不确定是否理解您的问题,但您可以将您的ViewController设置为每个过滤器的代表。然后在'tableView:didSelectRowAtIndexPath'中,你可以用一个if语句检查tableView调用哪个方法(比如通过比较标签)。 – Kirualex
非常感谢您的回答!但是:这不是相反吗?我需要将我的3个FilterTableViews的索引传递给MainDataTableView。我认为需要将3设置为MainView的代表。我错过了什么吗? – L00ps
你应该看看委托模式。委托是一个指向你的过滤器的指针,以便他们调用他们的方法(在协议中声明)。 – Kirualex