我在學習Objective-C,並在書中找到下面的代碼。我有3個問題,爲什麼在視圖控制器的頭文件中沒有協議聲明?
- 很明顯,它通過實施兩個所需的方法符合協議,但爲什麼這不工作而不寫入
<UITableViewDataSource,UITableViewDelegate>
在頭中? - 它符合哪種協議,
UITableViewDataSource
或UITableViewDelegate
? - 爲什麼沒有
UITableView.delegate = self
?
下面是代碼,
@implementation ItemsViewController
-(instancetype) init
{
self = [super initWithStyle:UITableViewStylePlain];
if (self) {
for (int i = 0; i < 5; i++)
{
[[ItemStore sharedStore] creatItem];
}
}
return self;
}
-(instancetype) initWithStyle:(UITableViewStyle)style
{
return [self init];
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[ItemStore sharedStore] allItems] count];
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *c = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell" forIndexPath:indexPath];
NSArray *items = [[ItemStore sharedStore] allItems];
Item *item = [items objectAtIndex:indexPath.row];
c.textLabel.text = [item description];
return c;
}
-(void) viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
}
@end
感謝您的幫助理解這一點。
謝謝!當我將不同的實例設置爲委託或數據源時,如果該類不是UITableViewController的子類,是否需要在該實例的類頭中顯式聲明'<'UITableViewDataSource,UITableViewDelegate'>'? – wz366
@ wz366是的,將接口標記爲已實施的協議是一種很好的做法。 – Amar
但它是強制性的? – wz366