إضافة أزرار متعددة إلى عرض برمجيًا ، اتصل بنفس الطريقة ، وتحديد الزر الذي كان عليه

StackOverflow https://stackoverflow.com/questions/2646297

سؤال

أرغب في إضافة العديد من Uibuttons متعددة برمجيًا إلى طريقة عرض - عدد الأزرار غير معروف في وقت الترجمة.

يمكنني صنع واحد أو أكثر من Uibutton مثل SO (في حلقة ، ولكن اختصار للبساطة):

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
       action:@selector(buttonClicked:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Button x" forState:UIControlStateNormal];
button.frame = CGRectMake(100.0, 100.0, 120.0, 50.0);
[view addSubview:button];

نسخ/تحرير من هذا الرابط:كيف أقوم بإنشاء Uibultton أساسي برمجيًا؟

ولكن كيف يمكنني تحديد في زر: أي زر تم النقر عليه؟ أرغب في تمرير بيانات العلامة إن أمكن لتحديد الزر.

هل كانت مفيدة؟

المحلول

يمكنك إما الاحتفاظ بمرجع إلى كائن الزر الفعلي في مكان ما يهم (مثل صفيف) أو تعيين علامة الزر على شيء مفيد (مثل الإزاحة في مجموعة بيانات أخرى). على سبيل المثال (باستخدام العلامة ، لأن هذا يجب أن يكون مفيدًا بشكل عام):

for( int i = 0; i < 5; i++ ) {
  UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  [aButton setTag:i];
  [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
  [aView addSubview:aButton];
}

// then ...

- (void)buttonClicked:(UIButton*)button
{
  NSLog(@"Button %ld clicked.", (long int)[button tag]);
}

نصائح أخرى

يمكنك تعيين علامة إلى الزر.

button.tag = i;

ثم في -buttonClicked:, ، تحقق من علامة المرسل:

-(void)buttonClicked:(UIButton*)sender {
   int tag = sender.tag;
   ...
}

أعتقد أن هذا سيكون أفضل إجابة:-
http://conecode.com/news/2012/05/ios-how-to-create-a-idgid-of-uibuttons/

لذلك أعط علامة مختلفة لكل زر واستخدم رمز مثل هذا:

[btn1 addTarget:self action:@selector(pressbtn:) forControlEvents:UIControlEventTouchUpInside];   
   [btn2 addTarget:self action:@selector(pressbtn:) forControlEvents:UIControlEventTouchUpInside];

& في الطريقة

-(void)pressbtn:(id)sender    {
 UIButton *button=sender;
        if (button.tag==1)
{
  NSLog(@"Press button 1");
}
    if (button.tag==2)
{
  NSLog(@"Press button 2");
}

وهكذا للتحقق من الزر الذي يسمى

إذا كنت ترغب في إضافة أزرار في وقت التشغيل ، فسيكون هناك 10 20 50 أو أكثر من ذلك. ثم يجب عليك استخدام طريقة عرض واجهة المستخدم في هذا الشرط.

عندما يتم إنشاء الأزرار ، يجب زيادة حجم عرض التمرير وفقًا لذلك.

ويمكنك كتابة الرمز مثل هذا

scrollview = [[UIScrollView alloc] init];      
        scrollview.contentSize = CGSizeMake(INVOICE_ADDITEM_SCROLLVIEW_CONTENT_WIDTH, INVOICE_ADDITEM_SCROLLVIEW_CONTENT_HEIGHT);
        scrollview.frame = CGRectMake(0,50, SCROLLVIEW_WIDTH, SCROLLVIEW_HEIGHT);
        //  scrollview.backgroundColor = [UIColor whiteColor];
        scrollview.scrollsToTop = NO;
        scrollview.delegate = self;
        [self.view addSubview:scrollview];


  for (int pos = 0; pos < 2; pos++) {
            UIButton *but = [UIButton buttonWithType:UIButtonTypeCustom];
            [but setImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal];
            [but setImage:[UIImage imageNamed:@"checkbox_active.png"] forState:UIControlStateSelected];
            [but setFrame:CGRectMake(TXT_FLD_X_CORD+90, 295, 20, 20)];
            //            [but setCenter:CGPointMake( 50,  i*40+20 )];
            but.tag = pos;
            /*if(pos==0)
            {
            [but setImage:[UIImage imageNamed:@"checkbox_active.png"] forState:UIControlStateNormal];
           // [but setImage:[UIImage imageNamed:@"checkbox_active.png"] forState:UIControlStateSelected];
            }*/
            [but setCenter:CGPointMake(pos*90+125 ,310)];
            [but addTarget:self action:@selector(checkboxButton:) forControlEvents:UIControlEventTouchUpInside];
            [scrollview addSubview:but];
        }

Uibutton لديه tag منشأه. استخدم ذلك وفي buttonClicked الطريقة ، يمكنك التحقق من الزر الذي تم النقر عليه بناءً على علامةه. قد ترغب في الحفاظ على الثوابت حول أي زر هو ما.

لكل من الأزرار الخاصة بك تعيين علامة مناسبة ، ثم الرجوع إلى العلامة في الإجراء الخاص بك. بمعنى آخر

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
...
button.tag = 1
[view addSubview:button]; 

يمكنك بسهولة تعيين العلامة بناءً على فهرس التكرار ، إذا كنت تقوم بإنشاء أزرار في حلقة. ثم في عملك:

- (void)aButtonWasTapped:(UIButton *)source {
    if( source.tag == 1 ) {
        // etc
    }
}

قد يكون لدى شخص ما هذه المشكلة:

جيسون كوكو عملت الإجابة بشكل جيد بالنسبة لي ، حتى أردت استخدام العلامة للوصول إلى الخصائص من nsarray تم تعريفها على أنها خاصية.

اتضح أن العقار كان يجب تعريفه على أنه "الاحتفاظ" بدلاً من "ضعيف".

النسخة السريعة (مع التسميات):

 for index in 1...5 {
      var label = UILabel()
      label.tag = index
      labelsDictionary["Label\(index)"] = label
      self.addSubview(label)
    }

اتصل باستخدام استخدام self.viewwithtag (i) كما uilabel:

(cell.viewWithTag(5) as UILabel).text
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top