gpt4 book ai didi

cocoa-touch - 初始化自定义 UITableViewCell

转载 作者:行者123 更新时间:2023-11-28 17:59:53 25 4
gpt4 key购买 nike

我试图将单个自定义单元格加载到 UITableView 中,但它一直抛出错误

UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:

我不知道为什么。我已将我的表格 View 单元格链接到代码中的 UITableViewCell 定义,但它一直给我这个错误。这是我的代码;任何帮助将不胜感激。

#import "RegisterDeviceViewController.h"


@implementation RegisterDeviceViewController

@synthesize checkString;
@synthesize cellRegistration;

// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
/*
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization.
}
return self;
}
*/


//Change UITableView Style to Grouped
- (id)initWithStyle:(UITableViewStyle)style {
// Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
style = UITableViewStyleGrouped;
if (self = [super initWithStyle:style]) {
}
return self;
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
self.title = @"Registration";
[super viewDidLoad];
}


// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

if (indexPath.section == 1) {
if (indexPath.row == 1) {
return cellRegistration;

}
}
return nil;
}


//Pass search type over to rootViewController section2
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
*/
}

/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc. that aren't in use.
}

- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
[super dealloc];
}


@end

最佳答案

好的。这不是 UITableView 的工作方式。当表格 View 需要绘制一个单元格(即一行)时;它在 dataSource 属性中指定的对象上调用 tableView:cellForRowAtIndexPath:。从该方法返回 UITableViewCell 是你的工作。 Apple 就是这样做的(以及您应该如何做):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AnIdentifierString"];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"AnIdentifierString"] autorelease];
}

cell.textLabel.text = @"This text will appear in the cell";


return cell;
}

调用该方法的次数取决于 TableView 中的部分数和每个部分中的行数。这个过程是这样的:

  1. Table View 在其 dataSource 上调用委托(delegate)方法 numberOfSectionsInTableView:(它知道它实现了该方法,因为 dataSource 必须遵守 UITableViewDataSource 协议(protocol))。
  2. 如果 numberOfSectionsInTableView: 返回一个大于零的数字, TableView 将调用 dataSource 上的委托(delegate)方法 tableView:numberOfRowsInSection:。因此,如果 numberOfSectionsInTableView: 返回 2tableView:numberOfRowsInSection: 将被调用两次。
  3. 如果每次调用 tableView:numberOfRowsInSection: 返回一个大于零的数字, TableView 将调用 dataSource 上的委托(delegate)方法 tableView:cellForRowAtIndexPath: ' 因此,如果 tableView:numberOfRowsInSection: 返回 5tableView:numberOfRowsInSection: 将被调用五次(每个单独的行一次).
  4. 自定义该单元格的显示方式的机会是在您收到可用单元格之后,但在它返回之前(上面显示“此文本将出现在单元格中”的位置)。你可以在这里做很多事情;您应该查看 UITableViewCell 的类引用以查看您可以执行的所有操作(我所做的只是将其设置为显示“此文本...”)。 上面 的行是 iOS 出于性能考虑重用单元格的一种方式。例如,如果您想要显示字符串数组中的某个字符串,您可以这样做(注意 indexPath 变量的使用):cell.textLabel.text = [someArrayYouHave objectAtIndex:indexPath.row];.

关于cocoa-touch - 初始化自定义 UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906592/

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