【iOS開發-56】案例BUG:button的enabled、控制項的userInteractionEnabled以及兩種提示框UIAlert和UIActionSheet

來源:互聯網
上載者:User

標籤:views   vpc   迴圈   add   gravity   ios   刪除   south   pop   

接上述案例找BUG:【iOS開發-51】案例學習:動畫新寫法、刪除子視圖、視圖順序、延遲方法、button多功能使用方法及icon表徵圖和啟動頁設定


(1)BUG:答案滿了就不能再點擊optionbutton,答案沒滿就能點。

在optionClick方法的if(full)中設定,即推斷答案是否滿了,假設滿了。則:

if (full) {        //假設答案滿了,無論是否正確,僅僅要滿了,以下的optionbutton就不能被點擊        for (UIButton *optionBtn in self.optionView.subviews) {            optionBtn.enabled=NO;        }}
僅僅要點擊答案button,答案必定沒有滿,所以做個相反操作:

-(void)answerClick:(UIButton *)answerBtn{    //假設答案滿了,無論是否正確。僅僅要滿了,以下的optionbutton就不能被點擊    for (UIButton *optionBtn in self.optionView.subviews) {        optionBtn.enabled=YES;    }}

(2)以上BUG的另外一種解決的方法:讓optionbutton的父控制項整個不能與使用者互動。

即用下面語句:

        self.optionView.userInteractionEnabled=NO;


        self.optionView.userInteractionEnabled=YES;

取代上面的for迴圈。

可是除了以上兩處之外,還要設定一處。就是由於我們推斷了僅僅要答案滿了,那麼父控制項就不能互動button不能點擊,儘管通過點擊答案就能恢複互動。

可是特殊情況是:我們點擊滿了,然後直接跳轉到“下一題”,此時父控制項依舊是被鎖定不能互動的。所以須要在“跳轉到下一題”的方法中,設定父控制項能互動。即

- (IBAction)nextQuestion {    self.optionView.userInteractionEnabled=YES;}

或者,最根本的是在加入optionbutton的那個方法中設定上面那句話:

-(void)addOptionBtn:(NSQuestion *)question{    self.optionView.userInteractionEnabled=YES;}

(3)到了最後一題,儘管“下一題”button被之前做了推斷不能點擊,可是假設答案答對了系統會繼續跳到下一題,這個時候依舊會崩潰,所以須要做個推斷,假設是最後一題。則……彈框。

——下面語句的原理在於:假設我們正在回答的時最後一道題,那麼答對之後,它會繼續調用nextQuestion方法,這個時候我們就推斷它是否是最後一道題,假設是,則彈框。

——這裡的彈框,我們用不到代理,可是為了複習代理知識,把self(控制器)設定為它的代理。

- (IBAction)nextQuestion {    if (self.index==self.questions.count-1) {        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"恭喜" message:@"闖關成功!" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"好的", nil];        [alert show];        return;    }}

——然後在開頭的地方遵守協議

@interface ViewController ()<UIAlertViewDelegate>

——最後能夠實現協議方法,也相當於能夠實現監聽。

比方以下這個button能夠監聽使用者點擊了哪個button,並能夠做一些反應,比方輸入是點擊了哪個button序號。

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{    NSLog(@"%d",buttonIndex);}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

(4)延伸一下,還有一種提示框。

ActionSheet

——提示框的展示稍有差別,它的出現是“在哪個視圖中出現”,還有其它出現方式。

- (IBAction)nextQuestion {    if (self.index==self.questions.count-1) {        UIActionSheet *sheet=[[UIActionSheet alloc]initWithTitle:@"恭喜通關!

" delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"確定" otherButtonTitles:@"其它", nil]; [sheet showInView:self.view]; return; }}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >



【iOS開發-56】案例BUG:button的enabled、控制項的userInteractionEnabled以及兩種提示框UIAlert和UIActionSheet

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.