0

我想给一个字符串值来UIButton标记唯一身份。我试过这段代码。但它不起作用。

    NSString *A;
    NSString *B;
    NSString *C;
    NSString *D;

    firstOptionABtn.tag=[A integerValue];
    secondOptonBbtn.tag=[B integerValue];
    thirdOptionCbtn.tag=[C integerValue];
    fourthOptionDbtn.tag=[D integerValue];  

   - (IBAction)BtnClicked:(UIButton *)sender {
     NSLog(@"%ld",(long)sender.tag);
   }

我不喜欢这种方式,但每次都会打印 0。我哪里错了?请帮忙。谢谢

4

7 回答 7

3

它返回零,因为您没有初始化字符串,并且当您将其转换为整数时它具有空值,它返回零。似乎您是从 NIB 创建按钮的,因此您可以从那里设置它们的标签值,然后通过实现来获得那里的值。

-( IBAction )buttonClicked:(id)sender 
{
    UIButton *btn= (UIButton *)sender;
    NSLog(@"%d",btn.tag);
}

但是如果你想要输出 A,B,C,D 那么还有一种方法

-(void)viewDidLoad{

  btn1.accessibilityLabel=@"A";
  btn2.accessibilityLabel=@"B";
  btn3.accessibilityLabel=@"C";
  btn4.accessibilityLabel=@"D";

}

-(IBAction)buttonClicked:(id)sender {

    UIButton *btn= (UIButton *)sender;
    NSLog(@"%@",btn.accessibilityLabel);
}

输出为 A、B、C、D

于 2013-09-27T07:21:14.110 回答
0

在标签中设置字符串是不可能的。如您所说,标签仅采用 int 值。

于 2013-09-27T06:04:02.420 回答
0

创建一个自定义视图,该视图由UIButton一个NSString属性或一个 ivar 组成,它将用作tag.

@interface MyButton: UIView

@property(nonatomic, strong) UIButton *button; 
@property(nonatomic, strong) NSString *uniqueTag;

@end

希望有帮助!

于 2013-09-27T06:05:54.813 回答
0

您始终可以创建一个包含字符串属性的自定义类以与所述类一起使用

例如:为 UIButton 创建一个自定义类

然后在头文件中放置:

@property (nonatomic, strong)NSString *labelTag;

 - (id)initWithFrame:(CGRect)frame withLabelTag:(NSString *)str;

然后,在实现中创建一个带有框架的 init 超级方法,所以它看起来像这样:

- (id)initWithFrame:(CGRect)frame withLabelTag:(NSString *)str{
    self = [super initWithFrame:frame];
    if (self) {
        //Init code
        _labelTag = str;
    }
    return self;
}

之后,每当你想设置或调用按钮的字符串标签时,你只需要声明它并像这样调用它:

MyCustomButton *button = [[MyCustomButton alloc]initWithFrame:frame withLabelTag:@"this is the title"];

//and to call it :
NSLog (@"the button's tag is :%@", button.labelTag)

或者,您总是可以只使用按钮的 title 属性,如果您不希望它显示在您的按钮上,只需将其 HIDDEN 属性设置为 YES

于 2014-01-27T07:41:25.053 回答
0

什么需要使用字符串来设置按钮的标签值...为什么不静态设置按钮的标签,只需设置如下:-

firstOptionABtn.tag=1;

第一次看到这个带有字符串的设置标签到 int 转换

在您的问题中,首先是您没有设置字符串的值

NSString *A;
NSString * B;
NSString * C;
NSString * D;

如果您设置字符串的值,例如

A=@"2"

然后你的代码工作,你得到了按钮点击事件的价值

firstOptionABtn.tag=[A integerValue];

它的输出是

发件人标签 2

进入你的字符串值考虑任何数字值然后隐蔽字符串到 Intiger cosider 只有数字而不是字母字符

例如

如果你设置像 A=@"2aaabbb" 这样的字符串值,那么按钮标签的输出是2但是如果你像 A=@"bb2aaabbb" 这样设置字符串值,那么按钮标签的输出总是 0 考虑。

更新

如果你想将字符设置为 int,你可以 NSString to ASCII像 Bellow 一样转换

 A=@"A"
 int ASCIINumber = [A characterAtIndex:0];
 button.tag=ASCIINumber;

输出为:- 如果小写输出为 97,则为大写 65

但是在使用上述方法时,我建议您使用简单tag=intNumber的 set 而不是上述方法。

于 2013-09-27T06:00:17.860 回答
0

有两种情况。

情况 1:如果您的标签字符串仅包含数字 - (例如tagStringValue = "1433":)

利用myButton.tag = [tagStringValue intValue];

取回按钮使用

UIButton *myButton = ([[self.view viewWithTag:[tagStringValue intValue]] isKindOfClass:[UIButton class]])?(UIButton *)[self.view viewWithTag:[tagStringValue intValue]]:nil;

案例2:如果您的标签字符串包含数字和字符串 - (例如tagStringValue = "ss1433kk":)

子类化 UIButton 并添加如下属性:

@property (nonatomic, strong) NSString *stringTag;并使用 this 而不是 default Tag

于 2014-03-27T01:36:22.323 回答
0

我们可以在 中为标签字符串创建一个类别UIButton

@interface UIButton (setTag)

@property(nonatomic, retain) NSString *tagString;

@end

您可以在文件中的任何位置将标签字符串设置为 UIButton。例如

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

[btn setTagString:@"Hello"];
于 2013-09-27T09:18:56.127 回答