单独的UITableViewDelegate

单独的UITableViewDelegate

我的应用程序中有一个UITableView,我正尝试将其委​​托方法放入单独的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(自动引用计数)中,仅当保留对对象的强引用时,该对象才会保留。请记住,“委托”始终很弱,在您的情况下,这意味着一旦您退出范围,即在其中创建委托对象并设置表视图的位置,将不再保留任何委托对象。这就是为什么当您尝试重新加载表视图时可能什么都没有发生的原因。使委托对象RestaurantViewDelegate成为控制器的成员。并检查..

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

10-12 03:45