我有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
。但要执行此操作,我需要使用发件人<从 @selector 方法访问该程序化UILabel
.text 属性/ strong>,或者我需要通过检测正在使用的单元格以某种方式将全局变量设置为等于该标签的文本。由于UIButton
是发件人,我假设我可能必须使UILabel像使用 touchUpInsideEvent 的按钮一样工作,以便我可以访问标签的文本财产通过发件人。我该怎么做?
目前我有一个名为 selectedNameString 的全局变量,我需要将其设置为等于nameLabel.text,需要在@selector方法中完成,以便我的prepareForSegue方法可以通过数据到下一个VC。
答案 0 :(得分:1)
您只需在标签上添加一个Tap手势识别器,然后使用您需要的按钮调用当前正在调用的方法。
[ self.nameLabel addGestureRecognizer:[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(nameButtonInvoked:)];
您可以在[发送者视图]的文字的帮助下访问UILabel的相关文本:
- (void) nameButtonInvoked:(id)sender
{
NSLog(@"nameButton Clicked..");
[self performSegueWithIdentifier:@"MySegue" sender:sender];
}
假设您已经在故事板中将当前视图控制器中的segue标记为“namePageView”视图控制器,并将segue的标识符设置为“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;
答案 1 :(得分:0)
另一种方法是将每个按钮的tag
属性设置为单元格indexPath.row
(假设您只有一个部分),然后在sender.tag
方法中使用nameButtonInvoked
访问表的数据数组。
为避免强制转换,您还可以将该方法声明为-(void)nameButtonInvoked:(UIButton*)sender