War*_*ior 284 iphone objective-c uitableview ios
我正在显示tableview从XML解析的组内容.我想禁用它上面的click事件(我根本不应该单击它)该表包含两个组.我想禁用第一组的选择,但不禁用第二组.单击第二组的第一行navigates到我的管player view.
如何才能选择特定的组或行?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section!=0)
if(indexPath.row==0)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:tubeUrl]];
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
Pug*_*gal 482
你只需要把这段代码放进去 cellForRowAtIndexPath
要禁用单元格的选择属性:(在点击单元格时)
cell.selectionStyle = UITableViewCellSelectionStyleNone;
Run Code Online (Sandbox Code Playgroud)
能够选择(点击)单元格:(点击单元格)
// Default style
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
// Gray style
cell.selectionStyle = UITableViewCellSelectionStyleGray;
Run Code Online (Sandbox Code Playgroud)
请注意,当用户触摸时,具有selectionStyle = UITableViewCellSelectionStyleNone;仍然会导致UI调用的单元格didSelectRowAtIndexPath.为避免这种情况,请按照以下建议进行操作并进
cell.userInteractionEnabled = NO;
Run Code Online (Sandbox Code Playgroud)
代替.另请注意,您可能希望将项目设置cell.textLabel.enabled = NO;为灰色.
Bri*_*dos 355
如果要使行(或行的子集)不可选,请实现该UITableViewDelegate方法-tableView:willSelectRowAtIndexPath:(也由TechZen提及).如果不indexPath应该是可选择的,则返回nil,否则返回indexPath.要获取默认选择行为,只需将indexPath传递给delegate方法返回,但您也可以通过返回不同来更改行选择indexPath.
例:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// rows in section 0 should not be selectable
if ( indexPath.section == 0 ) return nil;
// first 3 rows in any section should not be selectable
if ( indexPath.row <= 2 ) return nil;
// By default, allow row to be selected
return indexPath;
}
Run Code Online (Sandbox Code Playgroud)
Kel*_*ler 57
从iOS 6开始,您可以使用
-tableView:shouldHighlightRowAtIndexPath:
Run Code Online (Sandbox Code Playgroud)
如果您返回NO,则会禁用选择突出显示和连接到该单元格的故事板触发的segues.
当触摸在一行上时调用该方法.返回NO该消息将停止选择过程,并且在触摸关闭时不会导致当前选定的行丢失其选定的外观.
Mig*_*use 16
以上答案中没有一个能够正确解决问题.原因是我们要禁用单元格的选择,但不一定要禁用单元格内的子视图.
在我的情况下,我在行的中间呈现了一个UISwitch,我想禁用行的其余部分的选择(这是空的)但不是为了切换!因此,在该方法中这样做的正确方法
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
表格的陈述
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
Run Code Online (Sandbox Code Playgroud)
禁用特定单元格的选择,同时允许用户操作开关,从而使用适当的选择器.如果某人通过网络禁用用户交互,则情况并非如此
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
仅准备单元格并且不允许与UISwitch交互的方法.
而且,使用该方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
为了取消选择具有表单声明的单元格
[tableView deselectRowAtIndexPath:indexPath animated:NO];
Run Code Online (Sandbox Code Playgroud)
仍然显示在用户按下单元格的原始contentView时选择的行.
只是我的两分钱.我很确定很多人会觉得这很有用.
Tec*_*Zen 11
使用这些数据源方法捕获选择.
– tableView:willSelectRowAtIndexPath:
– tableView:didSelectRowAtIndexPath:
– tableView:willDeselectRowAtIndexPath:
– tableView:didDeselectRowAtIndexPath:
Run Code Online (Sandbox Code Playgroud)
在这些方法中,您可以检查所选行是否是您想要选择的行.如果是,采取行动,如果没有,什么都不做.
不幸的是,你不能只关闭一个部分的选择.这是整张桌子还是什么都没有.
但是,您可以将表格单元格selectionStyle属性设置为UITableViewCellSelectionStyleNone.我相信这会让选择变得无形.结合上述方法,从用户的角度来看,应该使细胞看起来完全惰性.
如果您的表中只有一些行是可选择的,那么可选行的单元格在视觉上与不可选行不同是很重要的.雪佛龙配件按钮是执行此操作的默认方式.
但是,如果你这样做,你不希望你的用户试图选择行并认为应用程序有错误,因为该行没有做任何事情.
Ale*_*ano 11
例如,对于Swift 4.0:
cell.isUserInteractionEnabled = false
cell.contentView.alpha = 0.5
Run Code Online (Sandbox Code Playgroud)
您需要执行以下操作以禁用cellForRowAtIndexPath方法中的单元格选择:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell setUserInteractionEnabled:NO];
Run Code Online (Sandbox Code Playgroud)
要显示灰显的单元格,请在tableView:WillDisplayCell:forRowAtIndexPath方法中添加以下内容:
[cell setAlpha:0.5];
Run Code Online (Sandbox Code Playgroud)
一种方法允许您控制交互性,另一种方法允许您控制UI外观.
对于快速:
cell.selectionStyle = .None
cell.userInteractionEnabled = false
Run Code Online (Sandbox Code Playgroud)
要停止选择某些单元格,请使用:
cell.userInteractionEnabled = NO;
Run Code Online (Sandbox Code Playgroud)
除了阻止选择之外,这还会阻止tableView:didSelectRowAtIndexPath:为设置它的单元格调用.
您可以使用该tableView:willDisplayCell方法对tableViewCell进行各种自定义。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell setUserInteractionEnabled:NO];
if (indexPath.section == 1 && indexPath.row == 0)
{
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];
[cell setUserInteractionEnabled:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,用户只能选择tableView第二部分中的第一行。其余所有行均无法选择。谢谢〜
我基于数据模型的解决方案:
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
let rowDetails = viewModel.rowDetails(forIndexPath: indexPath)
return rowDetails.enabled ? indexPath : nil
}
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let rowDetails = viewModel.rowDetails(forIndexPath: indexPath)
return rowDetails.enabled
}
Run Code Online (Sandbox Code Playgroud)
对于Swift 4.0,这可以解决问题。它将在didSelectRowAtIndexPath方法中禁用单元格,但保持子视图可单击。
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
if (indexPath.row == clickableIndex ) {
return indexPath
}else{
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
211352 次 |
| 最近记录: |