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.
这样做的正确方法是什么?
将视图添加到具有按钮的uitableview单元格,并由viewcontroller处理
当视图超出范围时,如何确保释放内存?
TIA,Praveen
我认为问题是,您正在释放控制器并仅使用其超级视图保留的子视图。动作模式需要一个目标,我假设它是已发布的控制器。如果你只需要 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可以轻松实现的初始化程序。
您可以使用UIViewController的viewDidUnload方法和 dealloc 方法确保释放内存。
| 归档时间: |
|
| 查看次数: |
6061 次 |
| 最近记录: |