iOS開發中的錯誤整理,關於用綁定Tag取控制項的注意事項,有時候不綁定也是個錯!

來源:互聯網
上載者:User

標籤:

:紅色框中是個自訂的導航工具條titlesView(沒有綁定Tag),工具條中有五個按鈕(按鈕綁定了Tag)以及一個紅色的指標indicatorView(沒有綁定Tag),下面的藍色是可以滾動的scrollView,拖動scrollView,紅色指標會滾到對應按鈕的下面,並且按鈕呈紅色顯示.

在scrollView的代理方法scrollViewDidEndDecelerating:中通過

  • 獲得按鈕首先注意的一點是,當指定的Tag為0時,會預設首先拿到的是調用這個方法的控制項,也就是父控制項titlesView,導致報錯
  • 其次注意的是,除了按鈕還有別的幹擾控制項(這裡只指標indicatorView),幹擾控制項添加到父控制項的時間比按鈕添加到父控制項的時間早,並且沒有綁定Tag,通過viewWithTag:方法也會首先拿到幹擾控制項,導致報錯.

解決方案:

  • 方案一:將父控制項以及幹擾控制項都綁定Tag,例如-1 -2 等
  • 方案二:不適合於父控制項,也就是說父控制項必須綁定個Tag.其餘幹擾控制項可以在按鈕都addView到父控制項後,幹擾控制項再add到父控制項.(不建議用這種,當代碼篇幅很長的時候,最後突然來了句addView:有時候真的很費解!)
 1 - (void)setupTitlesView 2 { 3     CGFloat width = self.view.width; 4     CGFloat height = 35; 5     UIView *titlesView = [[UIView alloc] init]; 6     titlesView.frame = CGRectMake(0, 64, width, height); 7     titlesView.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.6]; 8     titlesView.tag = -1; // scroll滾動完後要通過按鈕綁定的tag,得到按鈕並設定按鈕屬性,如果父控制項中子控制項不止有按鈕,別的view的tag不綁定預設也是0,當通過tag==0找按鈕的時候,就會報錯.所以這裡的解決辦法是講其餘view綁定別的tag 9     [self.view addSubview:titlesView];10     self.titlesView = titlesView;11     12     // 添加指標13     UIView *indicatorView = [[UIView alloc] init];14     indicatorView.backgroundColor = [UIColor redColor];15     indicatorView.height = 2;16     indicatorView.y = titlesView.height - indicatorView.height;17     indicatorView.tag = -2; // 理由同上,不設定也可以,但是要保證這些view的添加要添加到按鈕的後面18     [titlesView addSubview:indicatorView];19     self.indicatorView = indicatorView;20     21     NSArray *items = @[@"全部",@"視頻",@"音頻",@"圖片",@"段子"];22     23     CGFloat btnW = titlesView.width / items.count;24     CGFloat btnH = titlesView.height;25     CGFloat btnX = 0;26     CGFloat btnY = 0;27     // 迴圈添加按鈕28     for (int i = 0; i < items.count; i++) {29         UIButton *btn = [[UIButton alloc] init];30         btnX = btnW * i;31         btn.frame = CGRectMake(btnX, btnY, btnW, btnH);32         [btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];33         [btn setTitleColor:[UIColor redColor] forState:UIControlStateDisabled];34         [btn setTitle:items[i] forState:UIControlStateNormal];35         btn.titleLabel.font = [UIFont systemFontOfSize:14];36         btn.tag = i; // 給按鈕添加綁定tag37         [btn addTarget:self action:@selector(titleClick:) forControlEvents:UIControlEventTouchUpInside];38         [titlesView addSubview:btn];39         40         [btn layoutIfNeeded];41         42         if (i == 0) {43             self.selectedButton = btn;44             btn.enabled = NO;45             // 以後設定尺寸,先設定尺寸,再設定點46             self.indicatorView.width = btn.titleLabel.width;47             self.indicatorView.centerX = btn.centerX;48         }49     }50 }
View Code

 

iOS開發中的錯誤整理,關於用綁定Tag取控制項的注意事項,有時候不綁定也是個錯!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.