ios - 将参数传递给选择器操作

标签 ios objective-c string parameters selector

我处于一种我认为我接近解决问题的情况,但也许不是。

我有一个自定义表格 View 单元格的表格 View 。

目前每个 tableviewcell 有 3 个 uibuttons,访问它们并赋予它们功能是没有问题的。

我遇到问题的 3 个按钮之一。该按钮将用户从当前导航 Controller 推送到 webview Controller ,但我希望 webview Controller 是当前 tableview 单元格所持有的 http 地址。

这是我正在使用的代码的一小段。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Identifier";

    SearchTableCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"SearchTableCell" owner:nil options:nil];
        //cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseIdentifier];
        for(id currentObject in topLevelObjects)
        {
            if([currentObject isKindOfClass:[SearchTableCell class]])
            {
                cell = (SearchTableCell *)currentObject;
                break;
            }
        }
    }


    Player *event = [_party.events objectAtIndex:indexPath.row];
    cell.EventTitle.text = event.name;
    cell.EventDescription.text = event.description;
    cell.EventStartTime.text = event.start_date;
    cell.EventEndTime.text = event.end_date;
    cell.EventTicketURL = event.ticketURL;

    NSString *string = event.ticketURL;

    [cell.buyTicketOutlet addTarget:self action:@selector(pushToTicketURL:string) forControlEvents:UIControlEventTouchUpInside];
    //[cell.AddEventOutlet addTarget:self action:@selector(:) forControlEvents:UIControlEventTouchUpInside];
    //cell.textLabel.numberOfLines = 2;
    return cell;
}




- (void) pushToTicketURL:(NSString *)string
{

    UIViewController *webViewController = [[UIViewController alloc] init];
    webViewController.title = @"Tickets";
    UIWebView *uiWebView = [[UIWebView alloc] initWithFrame: CGRectMake(0,0,320,370)];

    [uiWebView loadRequest:[NSURLRequest requestWithURL: [NSURL URLWithString:string]]];

    [webViewController.view addSubview:uiWebView];
    [uiWebView release];

    [self.navigationController pushViewController:webViewController animated:YES];
    NSLog(@"Button pressed");
}

我看过其他一些关于同一问题的评论,但就像我说的,我只需要将一个参数传递给选择器,我知道这是不可能的,但我还能通过什么其他方式解决这个问题?

也许我的问题措辞不当:/。

任何帮助都会很棒:)

编辑:我理解 [cell.buyTicketOutlet addTarget:self action:@selector(pushToTicketURL:string) forControlEvents:UIControlEventTouchUpInside]; 给出了错误。但是,我可以通过什么变通方法来编写代码来完成我想做的事情?

最佳答案

虽然您不能将 URL 直接传递给选择器,但您可以传递按钮本身。所以我的建议是根据您的单元格行标记按钮并创建这样的操作:

void goToAddress: (id) sender {
   UIButton *button = (UIButton*) sender;
   if (button.tag == ..) {
   ...
  }
}

然后,在该方法中,您可以从编号等于按钮标记的单元格中“查找”URL。

除此之外,我相当确定在按钮的选择器中传递自定义参数或多个参数是不可能的。如果我错了,请纠正我。

希望对您有所帮助。

关于ios - 将参数传递给选择器操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16155616/

相关文章:

ios - 我在 iOS 中遇到一些布局约束错误

java - 字符串分割特殊正则表达式

iphone - 如何将 3d View 旋转 360 度?

string - :- Finding String permutations的迭代解决方案

c - 从字符串中提取单词(单词之间用空格和制表符分隔,可能是多个)

ios - 当互联网在 iOS 上可用时通知

ios - PresentingViewController 如何收到其 PresentedViewController 自行关闭的通知?

ios - 快速从 API 调用传递 json 数组的所有成员

Objective-C:理解 ARC

objective-c - 获取音乐播放的音频级别