如何设置UITableView
默认为无选择? indexPath.row = -1
或类似的东西?
这是我创建表格的代码:
UITableView* tblThisTable = [[UITableView alloc] initWithFrame:CGRectMake(elementX, elementY, elementW, elementH)];
tblThisTable.rowHeight = 30.0;
tblThisTable.layer.borderColor = [colorManager setColor:51.0 :51.0 :51.0].CGColor;
tblThisTable.layer.borderWidth = 1.0;
tblThisTable.delegate = self;
tblThisTable.dataSource = self;
我的委托协议的实现:
#pragma mark - Table View Management
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return arrStates.count;
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = [arrStates objectAtIndex:indexPath.row];
cell.textLabel.textColor = [colorManager setColor:66.0 :66.0 :66.0];
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:20.0];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
strSelectedState = [arrStates objectAtIndex:indexPath.row];
}
我有一个数据管理器类,在将其保存到plist之前检查用户条目的值。这是与表相关的代码(我只有状态表):
...
} else if ([[_arrAllElements objectAtIndex:i] isMemberOfClass:[UITableView class]]) {
UITableView* tblThisTable = (UITableView*)[_arrAllElements objectAtIndex:i];
strElementKey = @"State";
int selectedRow = tblThisTable.indexPathForSelectedRow.row;
if(selectedRow > -1) {
strElementValue = [arrStates objectAtIndex:selectedRow];
} else {
strElementValue = @"No Entry";
}
...
因此,如果用户点击保存按钮而没有在表格中选择任何内容,我仍然会为selectedRow获得0值,但没有任何内容显示为已选中。我在考虑UISegementedControls,你可以将它们设置为-1,没有选择。桌子不应该这样做吗?
答案 0 :(得分:1)
你是如何保存这一行的?如果您要保存未初始化的NSInteger
/ int
,则可以解释为什么默认为0
。
当你在表格中询问indexPathForSelectedRow
时,在获取nil
属性(row
row
之前,您需要检查它是否为nil
路径始终为0
)。此更新的代码应该满足您的需求:
NSIndexPath *selectedPath = tblThisTable.indexPathForSelectedRow;
if (selectedPath != nil) {
strElementValue = [arrStates objectAtIndex:selectedPath.row];
} else {
strElementValue = @"No Entry";
}
答案 1 :(得分:0)
将此代码放入.m文件中,它将取消选择所选行。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
答案 2 :(得分:0)
以下解决方案可行。编辑了用于创建单元格的代码:
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
}
cell.textLabel.text = [arrStates objectAtIndex:indexPath.row];
cell.textLabel.textColor = [colorManager setColor:66.0 :66.0 :66.0];
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:20.0];
return cell;
}
我添加了一行:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
答案 3 :(得分:0)
如果要将所有UITableView设置为默认为无选择(滚动也无法触摸)
然后使用表视图的属性 -
tableView.userInteractionEnabled=NO;
如果你想停止选择细胞,那么
cell.selectionStyle=UITableViewCellSelectionStyleNone;
答案 4 :(得分:0)
在Swift中
// IF tableview selected row
let selectedIndexPath = tableView_Main.indexPathForSelectedRow
if selectedIndexPath != nil {
tableView_Main.deselectRowAtIndexPath(selectedIndexPath!, animated: true)
}