2012-02-01 54 views
0

我在我的tableview应用程序中创建一个“喜欢的页面”菜单,用户可以在其中保存他们喜欢的网页,然后通过菜单更轻松地导航到它们。允许根据url字符串选择tableview单元格

程序会在设置应用程序中保存页面的名称和每个喜欢页面插槽的URL。默认URL为“clear”,表示没有URL(即最喜欢的插槽未使用)。

当用户单击桌面视图单元格以获取其所需的最喜欢页面时,视图将切换到UIWebview,并加载URL。我做到这一点,如果URL isEqualToString @"clear"UIWebView将不会加载显示,并且“无”将会发生。

但是,当用户单击URL设置为“清除”的tableview单元格时,单元格仍然以蓝色突出显示。这使得用户觉得tableview单元格没有被清除。无论如何检查URL是否为isEqualToString @"clear",并在单元格之前停止突出显示蓝色的单元格?

谢谢。

回答

1

编辑:这是一个更好的方法(在willSelect中执行...在第一次点击时太晚了)。

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     ... 
     if (--THIS IS THE 'CLEAR' URL CASE--) { 
      // This will prevent the **appearance** of being selected 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     } else { 
      cell.selectionStyle = UITableViewCellSelectionStyleBlue; 
     } 
     ... 
    } 

在didSelectCellForIndexPath ...

if (-- 'CLEAR' CASE --) { 
     // Do nothing... 
} else { 
     // do whatever you do for the selected case... 
} 
+0

但是如何指示单元格不是选择,而不是做什么? – DGund 2012-02-01 11:21:15

+0

看到上面编辑的代码 - 这是一个更干净的方式来做到这一点。 – Rayfleck 2012-02-01 14:29:36

+0

我应该重置选择样式之后还是自动重置?当用户点击一个实际的URL时,我希望它仍然突出显示。 – DGund 2012-02-01 23:52:29

0

你应该这样做在tableView:willSelectRowAtIndexPath:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSString *url = [self urlForIndexPath:indexPath]; 

    if ([url isEqualToString:@"clear"]) 
     return nil; 

    return indexPath; 
} 

但是,如果你不想让蓝色的亮点,你也应该改变的selectionStyle tableView:cellForRowAtIndexPath: