UITableView编辑中的多项选择 - 最多选择两行?

时间:2015-10-26 12:24:34

标签: ios objective-c uitableview

我有一个UITableView,其中选择会导致详细信息视图。我有BarbuttonItem名为比较,可启用编辑模式(在故事板中检查多个编辑)。

我希望用户能够精确选择两个条目(当选择两个条目时,另一个OK按钮将可用,否则仅启用取消按钮)。

我能够根据所选行的数量启用OK按钮但是如果已经选择了两个那么禁用选择?

3 个答案:

答案 0 :(得分:2)

在didselectRowAtIndexPath中:检查selectedEntries计数,如果是2则使用以下代码: -

namespace Efficiency_Interface
{
    [ComVisible(true)]
    [ProgId(ProjMan_Tab_PROGID)]
    public partial class Project_Management_Tab : UserControl
    {

        SwAddin SolidRun = new SwAddin();
        public const string ProjMan_Tab_PROGID = "Proj Management";
        public const string scratchFile = "C:\\keyStoneAddinScratch.txt";
        StreamWriter writeText = new StreamWriter(scratchFile);

        public Project_Management_Tab()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (var textBox in this.Controls.OfType<TextBox>())
            {
                writeText.WriteLine(textBox.Text);
            }
            writeText.Close();
            SolidRun.runGen("proc");
        }
    }
}

答案 1 :(得分:1)

尝试以下方法:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  if (tableView.indexPathsForSelectedRows.count == 2 && ![tableView.indexPathsForSelectedRows containsObject:indexPath]) {
    return nil;
  }

  return indexPath;
}

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
  return ([self tableView:tableView willSelectRowAtIndexPath:indexPath] != nil);
}

<强>解释

首先,您应该在willSelectRow(选择之前)而不是didSelectRow(选择之后)进行检查。 你检查是否达到了最大值......

if (tableView.indexPathsForSelectedRows.count == 2

如果达到最大值,则必须进行另一项检查以使细胞的DESELECTION工作:

&& ![tableView.indexPathsForSelectedRows containsObject:indexPath])

如果达到最大值并且尚未选择当前选定的行,则只需

return nil;

你还应该实现shouldHighlighRow方法来处理

  

被选中但在一毫秒后未被选中

你不想要的行为。希望我帮到你:)

答案 2 :(得分:0)

您需要在didSelectRowAtIndexPath:方法中构建此逻辑。跟踪已选择的单元格的数量,以及它的2是否不再执行代码。