2013-12-14 3 views
0

Я работаю с проектом iphone. В этом я добавил 3 кнопки с таким же именем селектора (например, действие). Теперь я извлекаю данные из базы данных с помощью запроса. Но он показывает мне данные на 3-ей кнопке только тогда, когда я нажимаю один из трех из трех.Получение значений тегов на селекторе

btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(80, 30, 200, 50); 
[btn.layer setBorderWidth:0]; 
btn.tag = 1; 
[btn setTitle:@"1" forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(detail:) forControlEvents:UIControlEventTouchUpInside]; 
btn.titleLabel.font = [UIFont fontWithName:@"Zapfino" size:14.0]; 
[scrollview addSubview:btn]; 


btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(80, 30, 200, 50); 
[btn.layer setBorderWidth:0]; 
btn.tag = 2; 
[btn setTitle:@"2" forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(detail:) forControlEvents:UIControlEventTouchUpInside]; 
btn.titleLabel.font = [UIFont fontWithName:@"Zapfino" size:14.0]; 
[scrollview addSubview:btn]; 


btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(80, 30, 200, 50); 
[btn.layer setBorderWidth:0]; 
btn.tag = 3; 
[btn setTitle:@"3" forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(detail:) forControlEvents:UIControlEventTouchUpInside]; 
btn.titleLabel.font = [UIFont fontWithName:@"Zapfino" size:14.0]; 
[scrollview addSubview:btn]; 

Это действие, которое я использую.

-(IBAction)detail:(id)sender 
{ 
    detailViewController *detailvc =[[detailViewController alloc]initWithNibName:@"detailViewController" bundle:Nil]; 
    detailvc.btntxt = btn.tag; 
    NSLog(@"name of btn :%ld",(long)btn.tag); 
    [self.navigationController pushViewController:detailvc animated:YES]; 
} 

В NSLog также я получаю вкладку 3 кнопки только пожалуйста, помогите мне по этому вопросу ...

+0

Вы не должны использовать тот же тег для всех 3-х кнопков – xfx

+0

SRY это было по ошибке я, имеющей различные значения тегов ..... – Sahil

+0

все эти кнопки в таком же положении? CGRectMake (80, 30, 200, 50)? пожалуйста, вставьте свой необработанный код, чтобы каждый мог видеть, в чем проблема. – xfx

ответ

0

Вы можете установить номер тега всех 3-х кнопок, к тому же значению (1) , Вам нужно использовать разные значения, если хотите, чтобы вы могли разделить свои кнопки.

Используйте тег 1 для первой кнопки, метку 2 для второго и тэг 3 для третьего.

+0

Я думаю, что вопрос уже использует три разных тега как 1,2 и 3. Основная проблема заключается в том, что объект 'btn' просто один. Все три тега назначены объекту signle, поэтому последний тег получает отражение. –

0

Используйте переменную sender, чтобы получить кнопку, которая срабатывает действие:

-(IBAction)detail:(id)sender 
{ 
    UIButton *button = (UIButton *)sender; 
    NSInteger buttonTag = button.tag; 
    // etc 
} 

Кроме того, дайте каждой кнопки свой собственный тег

btn.tag = 2; // and 3 

И не используйте переменную btn в действии метод. Он будет содержать только последнюю заданную переменную, которая в этом случае является третьей.

+0

Также все экземпляры кнопок одинаковы, например, 'btn'. В идеале следует использовать три разные переменные. –

+1

@BalramTiwari Я не думаю, что это изменит ситуацию. Каждой новой кнопке присваивается вид прокрутки 'addSubview'. Переменная может быть повторно использована без проблем. Лицо, которое 'btn', похоже, является ivar, является проблемой, хотя (должна быть переменной метода). –

+0

О, это верно. Согласовано, Btn должен быть локальным для метода. –

1

Вы назначаете 1 тег кнопки

btn.tag = 1; 

добавить другой тег для каждой кнопки

-

Также в вашем detail: взять тег от отправителя, а не переменной экземпляра

- (IBAction)detail:(UIButton *)sender { 
    detailViewController *detailvc =[[detailViewController alloc]initWithNibName:@"detailViewController" bundle:Nil]; 
    detailvc.btntxt = sender.tag; 
    NSLog(@"name of btn :%ld",(long) sender.tag); 
    [self.navigationController pushViewController:detailvc animated:YES]; 
} 
+0

sry это было по ошибке, у меня разные значения тегов ..... – Sahil

+0

ok Я обновил свой ответ –

+0

thanx bro работает. – Sahil

0

просто используйте ((UIButton)sender).tag вместо btn.tag

+0

Я думаю, вы пропустили '*' Просьба обновить его как ((UIButton *) отправитель) .tag Поскольку я не могу редактировать. –

0

Основная проблема с вашим кодом является то, что вы используете только одну кнопку, объект (& инициализирует его в три раза & добавив три метки & добавив его подвидов.), который выглядит как Ивар.

Таким образом, даже если вы добавили три разных тега к экземпляру одного объекта, последнее самое последнее будет отражено &, поэтому вы получаете всего 3 как тег, все время.

btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
.... 
btn.tag = 1; 
. 
. 
btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
... 
btn.tag = 2; 
. 
. 
btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
... 
btn.tag = 3 

Вместо этого вы либо не использовать объект БТН в Уре целевого метода или вы можете иметь три разные кнопки для хорошего понимания.

UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn1.frame = CGRectMake(80, 30, 200, 50); 
.... 
btn1.tag = 1; 
. 
. 
UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn2.frame = CGRectMake(80, 80, 200, 50); 
... 
btn2.tag = 2; 
. 
. 
UIButton* btn3 = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn3.frame = CGRectMake(80, 130, 200, 50); 
... 
btn3.tag = 3 

Rest вам нужно изменить код целевого метода в качестве

-(IBAction)detail:(UIButton *)sender 
{ 
    detailViewController *detailvc =[[detailViewController alloc]initWithNibName:@"detailViewController" bundle:Nil]; 
    detailvc.btntxt = sender.tag; 
    NSLog(@"name of btn :%ld",(long)sender.tag); 
    [self.navigationController pushViewController:detailvc animated:YES]; 
} 

Я надеюсь, что это, безусловно, поможет вам.

0
-(IBAction)detail:(UIButton*)sender 
{ 
if(sender.tag==1) 
{ 

} 
else if(sender.tag==2) 
{ 

} 
else if(sender.tag==3) 
{ 

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