从发件人 iOS 访问 UITableViewCell label.text

Access UITableViewCell label.text from sender iOS

我有一个 UITableView 以编程方式加载每个单元格的内容。具体来说,它绘制了一个名为 nameLabelUILabel 并使用一些文本设置 label.text 属性它来自我们的服务器。我有一个 UIButton 然后以编程方式在 UILabel 上绘制,这样当用户点击文本时,它会触发一个 @selector 方法,如下所示:

- (void) nameButtonInvoked:(id)sender
{
    NSLog(@"nameButton Clicked..");

    UIViewController *nameView = [self.storyboard instantiateViewControllerWithIdentifier:@"namePageView"];
    [self presentViewController:nameView animated:YES completion:nil];

}

我想将 nameLabel 中的实际文本传递给呈现的 ViewController、nameView,我会这样做prepareForSegue。但是要做到这一点,我需要从 @selector使用 sender 的方法,或者我需要通过检测正在使用的单元格以某种方式将全局变量设置为等于该标签的文本。由于 UIButton 是发件人,我假设我可能必须使 UILabel 像带有 touchUpInsideEvent 的按钮一样工作,以便我可以访问标签的文本 属性 通过发件人。我该怎么做?

目前我有一个名为 selectedNameString 的全局变量,我需要将其设置为等于 nameLabel.text,这需要在 @selector 方法中完成,所以我的 prepareForSegue 方法可以将数据传递给下一个 VC.

您可以简单地向您的标签添加一个 Tap 手势识别器,并使用您的情况不需要的按钮调用您当前正在调用的方法。

[ self.nameLabel addGestureRecognizer:[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(nameButtonInvoked:)];

并且您可以在 [sender view] 的文本的帮助下访问 UILabel 的关联文本:

- (void) nameButtonInvoked:(id)sender
{
    NSLog(@"nameButton Clicked..");
    [self performSegueWithIdentifier:@"MySegue" sender:sender];
}

假设您已经在故事板中标记了从当前视图控制器到 'namePageView' 视图控制器的转场并将转场的标识符设置为 "MySegue"。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"MySegue"]) {

        // Get destination view(your namePageView view controller)
        SecondView *vc = [segue destinationViewController];

        // Get your label text here
        NSString* labelText=((UILabel*)[sender view]).text;

         // Pass the information to your destination view
         [vc setSelectedText:labelText];
    }
}

此外,您必须在 'namePageView' 视图控制器中使用一种方法来获取您传递的文本,如下所示:

-(void)setSelectedText:(NSString*)text;

另一种方法是将每个按钮的 tag 属性 设置为单元格的 indexPath.row(假设您只有一个部分),然后在您的 nameButtonInvoked 方法来访问您的 table 的数据数组。

为避免转换,您还可以将该方法声明为 -(void)nameButtonInvoked:(UIButton*)sender