我有一个 UITableView
,它以编程方式加载每个单元格的内容。具体来说,它会绘制一个名为 nameLabel 的 UILabel
,并使用从我们的服务器获取的一些文本设置 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
来完成。但要做到这一点,我需要使用 sender< 从 @selector 方法访问该编程 UILabel
的 .text 属性/strong>,或者我需要通过检测正在使用的单元格以某种方式将全局变量设置为等于该标签的文本。由于 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];
}
假设您已经在 Storyboard中标记了从当前 View Controller 到“namePageView” View Controller 的转场,并将转场的标识符设置为“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” View Controller 中有一种方法来获取您传递的文本,如下所示:
-(void)setSelectedText:(NSString*)text;
关于ios - 从发件人 iOS 访问 UITableViewCell label.text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29039432/