我在 iOS 应用程序(没有 IBOutlet)上有一个 UITableView,它在它自己的类中被启动和构建。tableview 的宽度基于文本字段的宽度,并且具有固定的高度。tableview 周围还有一个细黑框。
启动语句如下:
-(id)initWithFrameFromField:(UITextField *)textField {
CGRect theFrame;
theFrame.origin.x = textField.frame.origin.x;
theFrame.origin.y = (textField.frame.origin.y + textField.frame.size.height);
theFrame.size.width = textField.frame.size.width;
theFrame.size.height = 100;
self.tableView = [self.tableView init];
self.tableView.frame = theFrame;
//Border
CALayer *layer = self.tableView.layer;
layer.borderWidth = 2;
layer.borderColor = [[UIColor blackColor] CGColor];
layer.cornerRadius = 10;
layer.masksToBounds = YES;
self.tableView.userInteractionEnabled = YES;
self.tableView.dataSource = self;
return self;
}
此外,这里是 cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//NSArray *contentForThisRow = [[self currentArray] objectAtIndex:[indexPath row]];
NSString *uniqueIdentifier = @"CellIdentifier";
SuggestionBoxCell *cell = nil;
[cell.contentView setUserInteractionEnabled:NO];
cell = (SuggestionBoxCell *) [self.tableView dequeueReusableCellWithIdentifier:uniqueIdentifier];
if(cell == nil)
{
NSArray *topLevelObjects = [[NSBundle mainBundle]loadNibNamed:@"SuggestionBoxCell" owner:nil options:nil];
for(id currentObject in topLevelObjects)
{
if([currentObject isKindOfClass:[UITableViewCell class]])
{
cell = (SuggestionBoxCell *)currentObject;
break;
}
}
}
if (indexPath.row == [suggestions getNumberOfEntries]) {
cell.textBox.text = @"Search History";
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
} else {
//Display entry
}
return cell;
}
显示单元格内容的所有代码都有效,并且数据源功能似乎没有任何问题。
让我大吃一惊的是应用商店版本(当前发布的版本是在 Xcode 4 中编译的)在 iOS7 上运行良好,我可以单击表格单元格条目,但是如果我采用完全相同的代码(没有修改完全)并在 Xcode 5 中编译并在 iOS7(模拟器和设备)上运行它我无法单击表格条目。更复杂的是,我可以在 iOS 6 上运行 Xcode 5 版本,没有任何问题。
这就是我卡住的地方,我已将我的 tableviewcell nib 文件转换回 Xcode 4.3 格式并再次转换回来,并确保所有“启用用户交互”布尔值都应该是无济于事的。
这是我的 didSelectRowAtIndexPath 的副本,用于特定的 tableview 和参考,这在被分配为委托的封装 UIViewController 中调用。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == ([tableView numberOfRowsInSection:0]-1)) {
//If the user clicks the last row in the table, go to search history
searchHistory = [[SearchHistoryViewController alloc]initWithNibName:@"SearchHistoryView" bundle:[NSBundle mainBundle]];
[MSUtilities presentViewController:searchHistory withParent:self];
} else {
//Change text in text field
}
}
这就是我卡住的地方。我已经为此工作了很多小时,并查看了许多 stackoverflow 帖子。有什么建议/解决方案/想法吗?
编辑:添加说明和简化代码。
EDIT2:按要求添加了 cellForRowAtIndexPath。