我正在用故事板構建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