我有一个UITableView
,其中选择会导致详细信息视图。我有BarbuttonItem
名为比较,可启用编辑模式(在故事板中检查多个编辑)。
我希望用户能够精确选择两个条目(当选择两个条目时,另一个OK按钮将可用,否则仅启用取消按钮)。
我能够根据所选行的数量启用OK按钮但是如果已经选择了两个那么禁用选择?
答案 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是否不再执行代码。