Objective c 单击并打开空白电子邮件时,如何让UILabel充当按钮?

Objective c 单击并打开空白电子邮件时,如何让UILabel充当按钮?,objective-c,Objective C,我已经建立了一个目录。有133人。我有三个标签。姓名、职位和电子邮件。如何使电子邮件标签作为按钮打开带有标签地址的空白电子邮件?我遇到的问题是标签是动态的,我在设置它时遇到了麻烦。我是一个初学者,所以任何帮助都将不胜感激 这是.h文件- @interface PersonDetailControllerViewController : UIViewController @property(weak) IBOutlet UILabel *name; @property(weak) IBOutle

我已经建立了一个目录。有133人。我有三个标签。姓名、职位和电子邮件。如何使电子邮件标签作为按钮打开带有标签地址的空白电子邮件?我遇到的问题是标签是动态的,我在设置它时遇到了麻烦。我是一个初学者,所以任何帮助都将不胜感激

这是.h文件-

@interface PersonDetailControllerViewController : UIViewController

@property(weak) IBOutlet UILabel *name;
@property(weak) IBOutlet UILabel *position;
@property(weak) IBOutlet UILabel *email;

@property(strong) Person *person;

@end
这是.m文件-

#import "PersonDetailControllerViewController.h"

@interface PersonDetailControllerViewController ()

@end

@implementation PersonDetailControllerViewController

@synthesize name, position, email, person;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

self.name.text = self.person.name;
self.position.text = self.person.position;
self.email.text = self.person.email;

// Do any additional setup after loading the view.
}

@end
UIButton包含一个名为titleLabel的属性,它实际上是一个UILabel,因此您不需要使用UILabel,只需使用UIButton即可。添加按钮后,将使用方法-voidsetTitle:NSString*title for状态:UIControlStatestate。这将把titleLabel属性设置为您在传递它的NSString中指定的任何内容

编辑:如果您一心想使用UILabel,可以执行以下操作:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
label.text = @"My Label";
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(alert)];
[label addGestureRecognizer:tap];
然后在你的方法中,做你想做的事情。在我的情况下,警报定义为:

- (void)alert
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
}

好的,基本上你需要做的是创建另一个viewController,这将是一个通用页面,它将根据所选的教师填充。当用户点击tableView中的一行时,您应该切换到detailView。有很多方法可以通过编程、故事板分段等方式完成此转换,但下面是一个示例:

TeacherDetailViewController *controller = [TeacherDetailViewController alloc] init];
controller.teacher = array[indexPath.row];
其中教师是一个财产@财产经济学、强者*人;在新的类TeacherDetailViewController上。通过设置教师属性,然后转换到新类,新类将从所选的person对象获取信息

在TeacherDetailViewController类中,您可以设置包含电子邮件按钮的视图,在viewDidLoad中,您可以:

-(void)viewDidLoad {
    teacherName.text = self.person.name;
}

然后我会在那个课堂上有一个按钮,上面写着给老师发电子邮件,这个按钮应该链接到一个动作方法,它可能看起来像这样:

-(void)sendEmail {
 MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
mailViewController.mailComposeDelegate = self;
[mailViewController setToRecipients:self.teacher.email];

[mailViewController setSubject:@"Subject Goes Here."];
[mailViewController setMessageBody:@"Your message goes here." isHTML:NO];

[self presentModalViewController:mailViewController animated:YES];

}

一种解决方案是使用UIButton而不是UILabel。按钮是否可以是动态的?您是否可以更清楚地了解位置。您的数据结构是如何设置的?目录的分类意味着什么?这对解决这个问题特别有帮助。是的,按钮包含一个UILabel,所以它们可以是dymanicok,基本上是一个联系人列表。这是给我所在学校的老师们的。