Custom Cell按钮单击

时间:2015-12-04 03:50:36

标签: ios objective-c uitableview

我的方案如下:

自定义单元格视图

enter image description here

1)我在自定义单元格视图中填充服务器中的数据,这是完全填充的,我想在我的数组中使用链接存储,我想在浏览器中打开,所以我想检查哪个index.row按钮被点击所以对于那一行我可以得到url链接并在浏览器中打开它,到目前为止我已经找到了按钮标签的解决方案,但这也没有工作,好像我们有两个单元格'在屏幕上同时点击按钮,两个按钮都返回相同的标签。

2)随着附加的图像我有另一个故事板我想要转换到一个新的视图控制器,与上面提到的相同,我想传递一个特定的帖子标题和密钥。

我希望每件事都清楚。

提前感谢。

4 个答案:

答案 0 :(得分:1)

回答问题的第一部分。标签很痛苦。最好将UIButton作为发送者传递,并且在按钮的操作中,您可以这样说:

-(void) buttonPresse:(UIButton *)sender
{
    CGPoint location = [self.tableView convertPoint:sender.bounds.origin fromView:sender];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
    UITableViewCell *cell = [self.table cellForRowAtIndexPath];
    //Do what you want with the cell or indexPath

}

答案 1 :(得分:0)

您可以扩展UITableViewCell并为其添加一个touple属性。包含index.row的密钥和包含URL的值,例如: - 1:" www.stackoverflow.com"。当您单击某个按钮时,您需要弄清楚的只是index.row,您可以从中获得所需的值。

答案 2 :(得分:0)

我找到了按钮标签的解决方案,但也没有工作

执行以下步骤以检测选择了哪个按钮。

  1. cellForRowAtIndexPath:方法中输入下面给出的代码段。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        // DEFINE CELL
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    
        // SET ACTION METHOD ON CALL BUTTON
        UIButton *button = (UIButton *) [self.view viewWithTag:40];
    
        [button setUserInteractionEnabled:YES];
    
        [button addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventAllTouchEvents];
    
    }
    
  2. checkButtonTapped:添加以下方法。

    - (void)checkButtonTapped:(UIButton *)sender
    {
        // GET POINT OF THE BUTTON PRESSED
        CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
    
        // GET INDEXPATH FOR THE CELL WHERE THE BUTTON IS PRESSED
        NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
    
        if (indexPath != nil)
        {
            //Use indxPath.row to get item
            //Perform operations
        }
    }
    
  3. 如果您想根据用户选择的单元格执行操作,还有另一种方法。

    如果要检查单击单元格的哪一行,则应使用以下方法。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
         NSLog(@"ShowindexPath%ld", (long)indexPath.row); }
    

    这里我们检查单元格上的用户交互。 indexPath.row将为用户选择的单元格返回index个数字。您可以执行其他操作来代替NSLog方法。

    为了在执行segue时发送值,请使用以下步骤:

    • NewViewController.h文件中创建要执行segue的属性,如下所示:

      @property (nonatomic) NSString* receivedValue;
      
    • @synthesize属性,在NewViewController.m@implementation

      中的@end文件中编写以下代码
      @synthesize receivedValue;
      
    • NewViewController.h文件中导入TableViewController.m文件。

    • 转到要发送值的prepareForSegue:文件中的TableViewController.m方法,并根据其中的类名编写以下代码。

      - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
      NewViewController *nVC = [segue destinationViewController];
      [nVC setReceivedValue:sendValue];
      }
      

    此处sendValue是您要发送的值。

    这就是全部。 构建并运行您的项目并享受。

答案 3 :(得分:0)

你可以在cellForRowAtIndexPath中为按钮添加目标,如:

 [cell.yourButton addTarget:self action:@selector(buttonAction:event:) forControlEvents:UIControlEventTouchUpInside];

您可以在这里收到此按钮的操作

-(void)buttonAction:(UIButton *)sender event:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchPos = [touch locationInView:self.tblview];
NSIndexPath *indexPath = [self.tblview  indexPathForRowAtPoint:touchPos];
if(indexPath != nil){

// handle click event..
    }
}
肯定会有效.........