计算UILabel和UIButtons大小来做句子?

时间:2012-07-23 20:12:00

标签: iphone objective-c ios uibutton uilabel

我正在尝试在我的应用中显示如下内容:

  

喜欢 @ user1 @ user2 3更多

许多应用都有这种格式用于发布帖子和评论的评论, 例如: @me 是的,苹果很好

当您点按他们的名字时,它会将您带到应用中的某个位置。

我想@ user1 @ user2以及另外3个可点击并执行选择器。

我也希望它们大胆而且有一定的颜色。

UIWebView可以对文字进行样式化,但是我可以通过触摸属性字符串的一部分来执行选择器吗?

我一直试图找到最好的方法来做到这一点,而不是制作标签和按钮,并按照每个用户名的长度动态计算它们:

Label  = "Liked by "
Button = "@user1"

Label ", "
Button = "@user2"

Label "and "
Button "3 more"

Label "."

一定有更好的方法! 提前谢谢。

2 个答案:

答案 0 :(得分:2)

使用内联UIWebView会更好 - 只要您不需要将其添加到滚动视图中。您可以通过为webview注册一些委托,然后将伪协议/ URL作为链接URL来检测webview中的操作/链接点击。像这样:

UIWebView *wv = [[UIWebView alloc] initWithFrame:aFrame];
wv.delegate = self;
[wv loadHTMLString:@"<a href='userlike:user1'>@user1</a> hates this." baseURL:nil ]; // further parts of this method name omitted
// because it's long, look it up in UIWebView class reference.
[self.view addSubview:vw];
[wv release];

委托方法:

- (BOOL)webView:(UIWebView *)wv shouldStartLoadWithRequest:(NSURLRequest *)rq navigationType:(UIWebViewNavigationType)type
{
    if ([[[rq URL] protocol] isEqualToString:@"userlike"])
    {
        NSString *userName = [[rq URL] host];
        // extract username from the URL, then
        return NO;
    }

    // else
    return YES;
}

编辑:我找到了this,正是您正在寻找的。 (事实证明,@regan也提出了完全相同的建议。)

答案 1 :(得分:1)

您可以通过HTML代码调用选择器,例如参见herehere