iPhone:如何在特定文本的动态标签上添加自定义按钮?

时间:2011-09-01 04:54:17

标签: iphone

朋友你好,

这低于我的代码。

         @interface DynamicLabel : UILabel

      {

      }

         - (id) getSize:(NSString *)text FontName:(NSString *)f_name FontSize:(float)f_size label:  (UILabel *)templbl;

     @end


      #import "DynamicLabel.h"

      #define DEFAULT_COLOR [UIColor blackColor] 

      @implementation DynamicLabel


      - (id)initWithFrame:(CGRect)frame 
     {
        if ((self = [super initWithFrame:frame])) 
     {

         }
         return self;
    }

    //function for dynamically get size of label 
     - (id) getSize:(NSString *)text FontName:(NSString *)f_name FontSize:(float)f_size label:(UILabel *)templbl
     {
         templbl.numberOfLines = 0;
         [templbl setFont:[UIFont fontWithName:f_name size:f_size]];
         [templbl setLineBreakMode:UILineBreakModeWordWrap];

         CGSize maximumLabelSize = CGSizeMake(310,9999);

         CGSize expectedLabelSize = [text sizeWithFont:templbl.font
                                constrainedToSize:maximumLabelSize 
                                                 lineBreakMode:templbl.lineBreakMode];

         CGRect newFrame = templbl.frame;
         NSLog(@"New Frame:--->%@",NSStringFromCGRect(newFrame));
         newFrame.size.height = expectedLabelSize.height;
         NSLog(@"New Frame Height:--->%f",newFrame.size.height);
         templbl.frame = newFrame;
         NSLog(@"Temp Label Frame:--->%@",NSStringFromCGRect(templbl.frame));
         [templbl setText:text];
         NSLog(@"Temp Label Text:---%@",templbl.text);
         [templbl sizeToFit];

         return templbl;
       }

我在RootViewController中使用了上面的代码并成功动态获取标签的高度

      #import "DynamicLabel.h"

      @interface RootViewController : UIViewController 
     {
       DynamicLabel *dlabel;    
     }

     @property (nonatomic,retain) DynamicLabel *dlabel;

     -(void)dynamiclabel;

     @end

        #import "RootViewController.h"
        #define LABELS_FONT_NAME_BOLD @"Helvetica-Bold"

        #define FONT_GREEN_COLOR [UIColor colorWithRed:0.122f green:0.416f blue:0.20f alpha:1.0f]

        @implementation RootViewController
        @synthesize dlabel;

        #pragma mark -

        #pragma mark View lifecycle


        - (void)viewDidLoad {
           [super viewDidLoad];
       self.title = @"Label Navigation Demo";
        }

        -(void)dynamiclabel
       {
         dlabel = [[DynamicLabel alloc] initWithFrame:CGRectMake(30, 130, 300, 20)];

        [dlabel getSize:@"Choose a topic from the left to find answers for your questions about iPhone. For the latest downloads, manuals, and other resources for iPhone, choose an option below."  
FontName:LABELS_FONT_NAME_BOLD FontSize:12.5f label:dlabel];
        dlabel.textColor = FONT_GREEN_COLOR;
        dlabel.backgroundColor = [UIColor clearColor];
        NSLog(@"Dynamic Label Height:--->%f",dlabel.frame.size.height);
            [self.view addSubview:dlabel];
        }

我的问题是我想在标签文本中显示iPhone文本的任何地方动态添加自定义按钮。有没有办法开发这个功能?

提前致谢。

4 个答案:

答案 0 :(得分:3)

您可以使用可伸缩图像和sizeWithFont:constrainedToSize:为任意段落的文本创建自定义大小的按钮,但需要解释的设计不是一个好的设计,按钮内的一个段落就是一个很好的例子。

enter image description here

答案 1 :(得分:1)

如果您想在标签中的某些自定义文字上创建“链接”,而不是使用@Fabian Kreiser建议的WebView,您可以使用我的OHAttributedLabel类(您可以找到它on Github here或搜索在Stackoverflow上的术语,也被其他帖子提及),它能够显示NSAttributedString并为其添加超链接。

请参阅我的github存储库中提供的示例代码:您可以使用我的addCustomLink:inRange:方法将链接(带有自定义URL)添加到一系列文本中(您可以通过迭代每次出现的文本来确定该范围)在你的文字中非常容易地说出“iPhone”字样)。然后在OHAttributedLabel的委托方法中,您可以捕获链接何时被点击并相应地采取行动以执行您需要的任何操作。

答案 2 :(得分:1)

要使UILabel可单击的一个单词作为超链接,您需要准确知道UILabel放置该单词的位置。这很难(并非不可能),特别是对于多行标签,特别是如果您允许调整字体大小以使文本适合。 为什么不使用UIWebView并使其成为超链接呢?或者将可点击的文本分开并将该文本放入UIButton中,例如:

label.text = @"Demo to set display view on label in ";
button.titleLabel.text = @"iPhone";

答案 3 :(得分:0)

每当您添加动态标签时,也要将UIButton添加到同一帧中。

当你这样做时,

    dlabel = [[DynamicLabel alloc] initWithFrame:CGRectMake(30, 130, 300, 20)];

此外,在添加标签后执行此操作

    UIButton* yourBtn = [[UIButton alloc] initWithFrame:CGRectMake(30, 130, 300, 20)];

并保留UIButtonTypeCustom并将其添加到视图中。