如何将uiviewcontroller的视图作为内容视图添加到uitableviewcell?

Pra*_*n S 9 iphone objective-c uitableview

我想添加一个uiviewcontroller的视图,它有一个按钮和几个标签作为uitableviewcell的内容视图.

虽然我能够添加,但按钮操作会导致崩溃.

MyViewController *controller = [[MyViewController alloc] initwithnibname:@"MyView" bundle:nil];
[cell.contentview addsubview:controller.view];
[controller release]; // if i comment out this part the button action is received by my view controller.
Run Code Online (Sandbox Code Playgroud)

但是从视图中删除时会出现内存泄漏.不调用myviewcontroller的dealloc.

这样做的正确方法是什么?

  1. 将视图添加到具有按钮的uitableview单元格,并由viewcontroller处理

  2. 当视图超出范围时,如何确保释放内存?

TIA,Praveen

Nic*_*ver 1

我认为问题是,您正在释放控制器并仅使用其超级视图保留的子视图。动作模式需要一个目标,我假设它是已发布的控制器。如果你只需要 viewController 的视图,为什么要释放它呢?保留它并通过属性保留对它的引用。

我将子视图添加到表视图单元格的方法是在 UITableViewCell 的子类中。假设您有一个 的子类UITableViewCell,例如ButtonTableViewCell。单元格的 init 会创建一个 UIButton 并将其添加到您的单元格中,并将其很好地放入其 contentView 中。Decalre 引用按钮的属性。喜欢UIButton *myButton。在 cellForRowAtIndexPath 中应该做的是这样的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ButtonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyButtonCell"];           
    if (cell == nil) {
        cell = [[ButtonTableViewCell alloc] initWithReuseIdentifier:@"MyButtonCell"];
    }
    [cell.myButton addTarget:self action:@selector(onDoSomething) forControlEvents:UIControlEventTouchUpInside];

    // Do more cell configuration...
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

我已经编写了initWithReuseIdentifier可以轻松实现的初始化程序。

您可以使用UIViewControllerviewDidUnload方法和 dealloc 方法确保释放内存。