我想为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。我哪里错了? 请帮忙。感谢
答案 0 :(得分: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
答案 1 :(得分:0)
需要使用字符串来设置按钮的设置标签值...为什么不静态设置按钮的标签,只需设置如下: -
firstOptionABtn.tag=1;
第一次看到这个设置标签的字符串为int convert
在你的任务中首先,你不是在设置你的字符串
NSString *A;
NSString * B;
NSString * C;
NSString * D;
如果设置字符串的值,如
A=@"2"
然后您的代码正常工作,您在按钮点击事件中获得了值
firstOptionABtn.tag=[A integerValue];
其输出
发件人代码2
进入你的字符串值考虑任何Number值,然后隐藏字符串只有Intiger cosider只有数字不是字母字符
例如
如果你设置字符串的值如A = @“2aaabbb”那么按钮标签的输出是 2 但是如果你设置字符串值如A = @“bb2aaabbb”那么按钮标签的输出是总是0考虑。
<强>更新强>
如果您希望将字符设置为int
你可以转换NSString to ASCII
像贝娄
A=@"A"
int ASCIINumber = [A characterAtIndex:0];
button.tag=ASCIINumber;
输出为: - 如果小写输出为大写,则为大写65
但是,使用上述方法我建议你只使用tag=intNumber
而不是上面的方法。
答案 2 :(得分:0)
在标签中设置字符串是不可能的。标签只接受你所知道的int值。
答案 3 :(得分:0)
创建一个自定义视图,该视图由UIButton
和NSString
属性或将用作tag
的ivar组成。
@interface MyButton: UIView
@property(nonatomic, strong) UIButton *button;
@property(nonatomic, strong) NSString *uniqueTag;
@end
希望有所帮助!
答案 4 :(得分:0)
我们可以在UIButton
中为标记字符串创建一个类别。
@interface UIButton (setTag)
@property(nonatomic, retain) NSString *tagString;
@end
您可以在文件中的任何位置将标记字符串设置为UIButton。 例如
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTagString:@"Hello"];
答案 5 :(得分:0)
你总是可以创建一个包含字符串属性的自定义类来与所述类一起使用
例如:为UIButton创建一个自定义类
然后在Header File中输入:
@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
答案 6 :(得分: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;
并使用此代替默认Tag
。