【问题标题】:Using a label as a button - when label is touched, assign value to a string使用标签作为按钮 - 当标签被触摸时,为字符串赋值
【发布时间】:2013-04-07 17:13:33
【问题描述】:

我在使用标签作为按钮时遇到了一些挑战。我有一个定义为 UILabel 的标签,并在我的 .h 文件中声明了字符串变量:

IBOutlet UILabel *l1;

@property(strong)NSString *myvariable;

在 xib 中,选择标签后,在 Identity Inspector 视图中的 Document 下,设置具有所需标签名称的 Label 字段 - 例如:l1。标签中还有一些静态文本。

在 File's Owner Connection Inspector 中,我将 l1 Outlet 连接到 l1 标签。

我的目标:当标签被触摸时,我想简单地分配一个带有文本值的字符串变量,例如可能在 .m 文件中执行的操作:

self.myvariable = l1.text;

我尝试失败的事情: - 在我的 .h 中设置一个 UIButton, - 尝试在 .m 中设置 UIButton - 在 XIB Identity Inspector 视图中,在 Accessibility 下,尝试检查按钮 Traits 复选框以将标签启用为按钮

我还没弄明白。这可能是一个简单的标签问题,我在标签方面的大部分经验包括静态文本显示,或使用纪元时间显示基于当前日期的倒计时。任何指导将不胜感激!

提前致谢! 抢

【问题讨论】:

    标签: xcode button uibutton uilabel


    【解决方案1】:

    环顾四周,大多数人建议使用实际按钮并将背景设置为透明或背景色。

    也就是说,您可以执行以下操作:

    在viewWillLoad中:

        UILabel * label = [[UILabel alloc] init]; // change/delete to use your obj
    
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pushAction)];
    [label addGestureRecognizer:tap];
    label.userInteractionEnabled = YES;
    

    然后设置选择器:

    - (void) pushAction
    {
        self.myvariable = l1.text;
    }
    

    【讨论】:

    • 谢谢,今晚我会试一试,看看效果如何,我会回复我的结果。关于使用实际按钮,我在标签上有相当多的文字——也许我可以使用一个按钮,然后设置自动换行。现在,我将 label.text 分配给变量的值。我不确定是否有办法获取按钮上的文本,然后将其设置为变量的值,但我应该也可以手动设置它。谢谢!罗伯
    • 谢谢马托,我试图让上面的例子工作,但没有成功。但是,我使用实际按钮而不是标签,效果很好!我唯一希望的是我可以分配按钮具有的任何内容文本(例如 - self.myvariable = mybutton.text},而不是在按钮中包含文本,然后在我设置变量时再次具有文本到字符串。但是您使用实际按钮的建议看起来像是要走的路!谢谢!Rob
    • @user1362308 嘿 Rob,我很惊讶它对你不起作用。我不确定您是否希望这样做,但如果您是,我会检查您的 xib 文件是否正在加载(听起来像是)并且标签是否已链接。还有'l1.userInteractionEnabled = YES;'是手势识别器工作的关键。无论如何,如果您想知道如何让它以另一种方式工作,请随时回复。
    • 感谢马特,感谢您的回复 - 我正在使用按钮方法继续前进,所以此时这对我来说效果很好! -罗伯
    【解决方案2】:

    您可以创建一个扩展 UILabel 的自定义类,它会覆盖

    - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

    您可以在 xib 的身份检查器中分配新的自定义 UILabel。

    【讨论】:

    • 谢谢,今晚我会试一试,看看效果如何,我会回复我的结果 - 谢谢!罗伯
    • 谢谢,我试图让它工作,但我无法让它工作。不过我很感谢你的建议!最后,我决定使用一个实际的按钮并摆脱标签。
    【解决方案3】:
    UILabel *lblname        = [[ UILabel alloc]initWithFrame: CGRectMake(10, 120, 200, 35)];
    lblname.text            = @"sunil";
    lblname.textColor       = [UIColor blueColor];
    lblname.textColor       = [UIColor blueColor];
    lblname.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:lblname];
    
    UIButton *btnpress      = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnpress.frame          = CGRectMake(10, 180, 300, 20);
    [btnpress setTitle:@"click" forState:UIControlStateNormal];
    [btnpress addTarget:self action:@selector(btnpress1) forControlEvents:UIControlEventTouchUpInside];
    btnpress.backgroundColor = [UIColor redColor];
    [self.view addSubview:btnpress];
    

    【讨论】:

      【解决方案4】:

      我想让我的整个屏幕成为一个按钮,当按下该按钮时,它会更改显示在按钮上方的标签上的文本。这就是我在 xcode 上的做法:

      在故事板中,我将一个按钮拖到界面上。在您编辑按钮的右上角,我将按钮内容设置为“组”而不是文本。不要在按钮上将 alpha 设置为 0。然后我在按钮/组的顶部拖动了一个标签。当 ctrl 拖动必要的动作和出口时,一定要通过暴露情节提要的左侧面板来做到这一点。更改按钮内容类型后,您可能只能通过鼠标访问该组。

      【讨论】:

      • 这不是答案,请将其删除,否则将被审核。
      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      相关资源
      最近更新 更多