【问题标题】:Make only part of a sentence a link (add selector)仅将句子的一部分作为链接(添加选择器)
【发布时间】:2014-02-06 01:51:51
【问题描述】:

所以我正在尝试实现以下内容。我有一个观点,里面有一句话。只有部分句子链接到另一个视图。这是它的样子:

I am a cat. Learn More

“了解更多”将是一个链接(蓝色),单击该链接会打开另一个视图。

目前我正在使用 UILabel 来写“我是一只猫”。我意识到添加选择器的最佳方式是使用按钮,所以“了解更多”应该是一个按钮?

有没有什么方法可以不用两个不同的 UIComponent 来写出这句话?

如果不是,那么如何使 UILabel 和 UIButton 完全水平对齐?

以下是我在 -layoutSubviews 中的标签代码:

CGSize labelSize = [_label.text sizeWithFont:_label.font constrainedToSize:bounds.size lineBreakMode:_label.lineBreakMode];
  _label.frame = CGRectMake(0, 0, bounds.size.width - kMarginForText, labelSize.height);
  _label.center = CGPointMake(horizontalCenter, CGRectGetMaxY(_previousLabel.frame) + kDistanceBetweenPreviousAndCurrentLabel);

以及标签本身的代码。

    _label = [[UILabel alloc] initWithFrame:CGRectZero];
    _label.text = "I am a cat";
    _label.font = [UIFont systemFontOfSize:14];
    _label.textAlignment = NSTextAlignmentCenter;
    _label.numberOfLines = 0;
    _label.lineBreakMode = UILineBreakModeWordWrap;
    [self addSubview:_label];

任何帮助将不胜感激!

【问题讨论】:

  • 你为什么不用故事板?

标签: ios objective-c


【解决方案1】:

要回答有关单个 UIComponent 的问题,您可以将 UILabel 与 UITapGestureRecognizer 结合使用来创建预期的效果。诚然,这将使整个标签可点击……但拥有更大的点击目标区域几乎从来都不是一件坏事。

特别是您将使用 NSAttributedString 来设置标签文本 (NSAttributedString change color at end of string):

UILabel *label = [[UILabel alloc] init];
//Use initwithframe or setup your constraints after initialization here
label.attributedText = (your nsattributed string here)

然后要将点击识别器初始化到 UILabel 上,您可以执行以下操作:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userDidTapLearnMore)];
label.userInteractionEnabled = YES;
[label addGestureRecognizer:tap];

【讨论】:

    【解决方案2】:

    您要做的是通过它们的基线对齐它们,您可以在 Interface Builder 中通过选择它们并选择 Editor > Align > Baselines 轻松地做到这一点,如下图所示:

    【讨论】:

    • 谢谢!但是,如果我需要以编程方式执行此操作怎么办?
    • 然后你会使用自动布局。 NSLayoutConstraint 使您能够将一个视图的基线固定到另一个视图的基线。
    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多