我正在使用我的视图控制器的搜索栏和显示控制器。当我使用默认UITableViewCell
时,一切正常。但是,当我使用自定义单元格与控制器。它不会在拖动的标签上显示文字。
此代码工作正常 -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if (tableView == self.searchDisplayController.searchResultsTableView) {
cell.textLabel.text = [[searchResults objectAtIndex:indexPath.row] objectForKey:@"userName"];
}
return cell;
}
现在我已经为该原型单元分配了一个名为SearchFriendCell
和标识符SearchFriends
的类。 SearchFriendCell
类包含带插座的标签。
现在如果我用以下代码替换上面的代码,它不会显示任何结果。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"SearchFriends";
SearchFriendCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
cell = [[SearchFriendCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if (tableView == self.searchDisplayController.searchResultsTableView) {
cell.friendName.text = [[searchResults objectAtIndex:indexPath.row] objectForKey:@"userName"];// this line doesn't work
}
return cell;
}
在修改后的代码中,如果我用以下行替换注释行,则显示结果 -
cell.textLabel.text = [[searchResults objectAtIndex:indexPath.row] objectForKey:@"userName"];
我不知道这里有什么问题。搜索栏显示控制器无法识别我的原型单元格。在此之前我已多次使用表视图控制器,但我没有遇到这种类型的问题。 帮帮我一些好的答案。
答案 0 :(得分:4)
当您调用
时,您的原型单元格会在您的tableview中注册,但会在搜索栏结果表视图中注册- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"SearchFriends";
SearchFriendCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
您正在使用参数tableView,它可以是搜索栏结果tableview,它没有自定义原型的注册表。所以只需改为
SearchFriendCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
你可能不再需要了
if (cell == nil) { ... }
最好的问候, JL
答案 1 :(得分:2)
您的手机未正确注册。您说您有一个具有正确标识符的原型单元格,但在代码中您没有看到正在创建的单元格的实例。这意味着您的代码将运行:
cell = [[SearchFriendCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
不会创建所有子视图或连接任何商店。
您需要找出您的手机未正确注册的原因。如果您在故事板中创建它,那么它应该包含在将要使用它的表视图中(它应该自动注册单元格)。如果您在独立的XIB文件中创建它,那么您需要加载NIB并在加载表视图时显式注册它。
您有2个表视图,单元格注册了一个而不是另一个 - 这是原型单元的工作方式。
您最好的选择:
答案 2 :(得分:0)
您需要创建插座并将其与表格视图相结合
@property (weak, nonatomic) IBOutlet UITableView *myTableView;
而不是使用
SearchFriendCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
使用
SearchFriendCell *cell = [self.myTableView dequeueReusableCellWithIdentifier:CellIdentifier];