从UITableViewCell打开邮件和Safari

时间:2012-01-26 20:39:23

标签: url ios5 uitableview

我有一个带有两个UITableViewCell的表(每个都有一个标签)。

我们的想法是实现经典的关于页面,其中包含指向应用程序网站的链接以及指向支持电子邮件的链接。

这就是它的样子:

图片在这里:http://dl.dropbox.com/u/3930527/Xcode002.jpg

在来到这里寻求帮助之前我一直在四处寻找,但是,像往常一样,如此多的奇怪而复杂的解决方案来实现我的胆量告诉我的事情必须更容易。

我不确定要走的路是让标签可以链接。由于我在单元格上启用了用户交互,我认为使用该事件自然地为第1行触发[b] Safari [/ b],为第2行触发[b] Mail [/ b]。

我说错了吗?有推荐的方法吗?

1 个答案:

答案 0 :(得分:6)

要在safari中打开网址,您可以使用UIApplication#openURL method。您也可以使用相同的方法使用mailto:链接打开邮件。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  if(indexPath.row == 0){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://myawesomeapp.com/support"];
  } else if(indexPath.row == 1){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"support@myawesomeapp.com"];
  }
}

可以说,对您的支持电子邮件问题更好的解决方案是在您的应用中以模态方式显示“撰写新电子邮件”屏幕,这很容易做到。

首先,您需要将MessageUI框架添加到您的应用中,同时让您的表格视图控制器回复MFMailComposeViewControllerDelegate

然后,不是上面调用UIApplication,而是沿着这些方向做点什么:

if ([MFMailComposeViewController canSendMail]) {
  MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
  mailViewController.mailComposeDelegate = self;
  [mailViewController setSubject:@"[My Awesome App] Support request"];
  [mailViewController setToRecipients:[NSArray arrayWithObject:@"support@myawesomeapp.com]];
  [self presentModalViewController:mailViewController animated:YES];
}

这将显示“撰写新电子邮件”模式,并将用户留在您的应用内,而不是切换到Mail本身。您还需要处理以下委托方法,以便在用户完成后隐藏模态:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error{
  [self dismissModalViewControllerAnimated:YES];
}