2013-09-27 3 views
0

Я хотел указать строковое значение для тега UIButton для уникальных идентификаторов. Я пробовал этот код. Но он не работает.Назначить строку значению тега 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

downvoter why downvoting me. – Jitendra

+0

Возможный дубликат [Как передать строку как тег UIButton] (http://stackoverflow.com/questions/9632040/how-to-pass-a-string-as-a-tag-of-uibutton) –

ответ

0

Что нужно использовать строку для заданного значения тега кнопки ... почему бы не установить тег Button статически просто установить, как: -

firstOptionABtn.tag=1; 

Первый раз видел эту настройку тег строки в целое преобразовать

В вашем Queston-первых, это вы не седений значение вами строки

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

если вы установите значение строки как

[email protected]"2" 

, то ваш код работает, и вы получили значение в случае нажатия кнопки

firstOptionABtn.tag=[A integerValue]; 

его выход

отправителя тег 2

В вас строковом значении рассмотреть любые номера значение, то скрытая строка только для cosider Intiger. Номер не алфавитный символ, как

, например

Если установить значение строки, как A = @ «2aaabbb», то вывод кнопки тега Но если вы установите значение строки, как A = @ «bb2aaabbb», то выход тега кнопки всегда учитывается.

UPDATE

, если вы хотите установить символ INT вы можете конвертировать NSString to ASCII Как и пыльник

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

ВЫХОД ЕСТЬ: - 65 для верхнего случае, если нижний регистр OUTPUT IS 97

Но, как использование вышеуказанного метода, я предлагаю лет u просто установите tag=intNumber вместо того, чтобы делать выше.

+0

Я знаю, что значение тега всегда хранится в int, но я просто узнаю, почему я задаю этот вопрос. – Jitendra

+0

Мне нужен выход A, B, C, D, как это .... – Jitendra

+0

ABCD не рассматривается как целочисленное значение, которое всегда возвращает 0, если вы пытаетесь преобразовать строку в Integer. поэтому лучше использовать значение int Number. проверьте мой обновленный ответ, который я полностью объясню. –

0

Невозможно установить строку в теге. Тег принимает только значение int, как вы сказали, знаете.

0

Создать пользовательский вид, который состоит из UIButton и NSString или ivar, который будет служить tag.

@interface MyButton: UIView 

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

@end 

Надеюсь, что это поможет!

3

Он возвращает ноль, поскольку вы не инициализировали строку, и оно имеет нулевое значение, когда вы конвертируете его в целое число, которое возвращает нуль. И кажется, что вы создаете свою кнопку из NIB, чтобы вы могли установить их значение тега, а затем получить там значение, выполнив.

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

, но если и хотят выхода A, B, C, D, то есть также способ

-(void)viewDidLoad{ 

    [email protected]"A"; 
    [email protected]"B"; 
    [email protected]"C"; 
    [email protected]"D"; 

} 

-(IBAction)buttonClicked:(id)sender { 

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

выход A, B, C, D

+0

Большое спасибо. Это сработало для меня :) –

0

мы можем сделать категория для строки тега в UIButton.

@interface UIButton (setTag) 

@property(nonatomic, retain) NSString *tagString; 

@end 

И нигде в вашем файле вы можете установить строку тега в свой UIButton. например

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 

[btn setTagString:@"Hello"]; 
0

вы всегда можете создать собственный класс, содержащий свойство строки, чтобы идти вместе с указанными классами

, например: создать пользовательский класс для UIButton

, а затем на сайте заголовка файла :

@property (nonatomic, strong)NSString *labelTag; 

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

, а затем, при реализации создания супер метод инициализации с рамкой, так это выглядело так:

- (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) 

или, вы всегда можете просто использовать и если вы не хотите, чтобы он отображался на вашей кнопке, просто установите его HIDDEN prop на YES

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: If строка вашего тега содержит числа и строки - (например: tagStringValue = "ss1433kk")

подклассы UIButton и добавить свойство, как:

@property (nonatomic, strong) NSString *stringTag; и использовать это вместо дефолта Tag.

Смежные вопросы