gpt4 book ai didi

ios - 如何使用委托(delegate)子类化 UITableView?

转载 作者:行者123 更新时间:2023-11-29 11:47:47 25 4
gpt4 key购买 nike

我在我的应用程序中子类化了 UITableView。它被设置为自己的委托(delegate)。

@interface TableView : UITableView <UITableViewDelegate, UITableViewDataSource>

@property (nonatomic, assign) id delegate;

- (id)initWithFrame:(CGRect)frame;

@end

@implementation TableView

@synthesize delegate;

- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, self.frame.size.height-144, self.frame.size.width, 40)];

super.delegate = self;
super.dataSource = self;
self.tableFooterView = footerView;
}
return self;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 15;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return [self.delegate tableView:tableView cellForRowAtIndexPath:indexPath];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];

NSLog(@"Selected row!");
}

@end

现在,我不明白的是我的 TableView 如何成为 UITableView 的委托(delegate),但也有一个不同的委托(delegate)属性,它有时会通过管道将某些函数传递给它。因此,我希望 - 例如 - numberOfRowsInSection 由此类处理,但 - 例如 - didSelectRowAtIndexPath 被转发到 UIViewController 或任何呈现它的东西。

最佳答案

每个委托(delegate)方法都有一个属性(UITableView *)tableView,您可以使用它来标识要执行的 TableView 操作

例如假设您有 2 个 TableView tableView1tableView2 现在做这样的事情

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if tableView == self {
return [self.delegate tableView:tableView cellForRowAtIndexPath:indexPath];
} else if tableView == tableView2 {
// Do something
}
}

您可以使用 super 和 self 调用来实现相同的概念

编辑

创建一个名为 customDelegate 的属性,现在在您的 ViewController 中设置 customDelegate = self 并保持 TableView 的委托(delegate)不变现在当你希望类应该处理调用时,不要做任何事情,因为行为是默认的

但是如果您希望您的 viewController 应该处理调用,那么只需使用该 customDelegate 属性通过管道传递它

例如

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if <SOME_CONDITION> {
// This will cause the TableView's delegate to be called
return [self.delegate tableView:tableView cellForRowAtIndexPath:indexPath];
} else {
// We wish the ViewController to handler this action then
return [self.customDelegate tableView:tableView cellForRowAtIndexPath:indexPath];
}
}

关于ios - 如何使用委托(delegate)子类化 UITableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42718758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com