gpt4 book ai didi

ios - 难以尝试实现单独的 UITableViewDelegate

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

我的应用程序中有一个 UITableView,我试图将其委托(delegate)方法拉入单独的 UITableViewDelegate 中。这是代码的样子:

RestaurantViewDelegate *delegate = [[RestaurantViewDelegate alloc] initWithRestaurant:self.restaurant andRecommended:self.recommended];

self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 235.0f, self.view.frame.size.width, self.view.frame.size.height-235)];
self.tableView.delegate = delegate;
self.tableView.dataSource = delegate;
[self.view addSubview:self.tableView];

这就是 RestaurantViewDelegate 的样子:

// RestaurantViewDelegate.h

@interface RestaurantViewDelegate : NSObject <UITableViewDelegate>

@property (nonatomic, strong) NSArray *recommendations;
@property (nonatomic, strong) Restaurant *restaurant;

- (id)initWith Restaurant:(Restaurant *)restaurant andRecommended:(NSArray *)recommendations;

@end

// RestaurantViewDelegate.m

@implementation RestaurantViewDelegate

@synthesize recommendations = _recommendations;
@synthesize restaurant = _restaurant;

- (id)initWith Restaurant:(Restaurant *)restaurant andRecommended:(NSArray *)recommendations {

self = [super init];
if ( self != nil ) {

_recommendations = recommendations;
_restaurant = restaurant;
}
return self;
}

#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"Recommendations: %d", [_recommendations count]);
return [_recommendations count];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 48.0f;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
}

return cell;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

@end

但是,当我运行应用程序并单击某个单元格时,所有单元格都会消失。我真的不知道是什么原因造成的。关于我做错了什么有什么想法吗?

最佳答案

这是一个很有趣的问题。请记住,在 ARC(自动引用计数)中,只要保持对对象的强引用,该对象就会被保留。请记住,“委托(delegate)”总是很弱,在您的情况下,这意味着,一旦您离开范围,即您创建委托(delegate)对象并设置 TableView 的位置,将不再保留任何委托(delegate)对象。这就是当您尝试重新加载 TableView 时可能看不到任何事情发生的原因。使委托(delegate)对象 RestaurantViewDelegate 成为 Controller 的成员。并检查..

关于ios - 难以尝试实现单独的 UITableViewDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35976490/

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