4

如何将 aUITableView默认设置为无选择? 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 以不进行选择。桌子不应该做同样的事情吗?

4

5 回答 5

1

你是如何保存行的?如果您要保存一个未初始化的NSInteger/ int,这可能会解释为什么它默认为0.


当您向桌子索要 时indexPathForSelectedRow,您需要nil在获取row财产之前检查它是否是(路径rownil总是是0)。这个更新的代码应该可以满足您的需要:

NSIndexPath *selectedPath = tblThisTable.indexPathForSelectedRow;
if (selectedPath != nil) { 
    strElementValue = [arrStates objectAtIndex:selectedPath.row];
} else {
    strElementValue = @"No Entry";
}
于 2013-04-16T13:24:51.100 回答
0

将此代码放入您的 .m 文件中,它将取消选择选定的行。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}
于 2013-04-16T13:00:17.297 回答
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;

更多信息可以在这里找到:http: //developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html

于 2013-04-16T13:35:35.913 回答
0

如果要将所有 UITableView 设置为默认为无选择(滚动也不可触摸)

然后使用表格视图的属性 -

tableView.userInteractionEnabled=NO;

如果你想停止选择单元格,

cell.selectionStyle=UITableViewCellSelectionStyleNone;
于 2013-04-18T13:06:53.323 回答
0

在斯威夫特

// IF tableview selected row
let selectedIndexPath = tableView_Main.indexPathForSelectedRow

if selectedIndexPath != nil {

  tableView_Main.deselectRowAtIndexPath(selectedIndexPath!, animated: true)

}
于 2016-10-06T05:30:14.560 回答