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

來源:互聯網
上載者:User

標籤:des   blog   http   io   os   ar   for   2014   on   

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


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

在optionClick方法的if(full)中設定,即判斷答案是否滿了,如果滿了,則:

if (full) {        //如果答案滿了,不管是否正確,只要滿了,下面的option按鈕就不能被點擊        for (UIButton *optionBtn in self.optionView.subviews) {            optionBtn.enabled=NO;        }}
只要點擊答案按鈕,答案必然沒有滿,所以做個相反操作:

-(void)answerClick:(UIButton *)answerBtn{    //如果答案滿了,不管是否正確,只要滿了,下面的option按鈕就不能被點擊    for (UIButton *optionBtn in self.optionView.subviews) {        optionBtn.enabled=YES;    }}

(2)以上BUG的第二種解決辦法:讓option按鈕的父控制項整個不能與使用者互動。

即用以下語句:

        self.optionView.userInteractionEnabled=NO;


        self.optionView.userInteractionEnabled=YES;

代替上面的for迴圈。

但是除了以上兩處之外,還要設定一處。就是因為我們判斷了只要答案滿了,那麼父控制項就不能互動按鈕不能點擊,雖然通過點擊答案就能恢複互動。但是特殊情況是:我們點擊滿了,然後直接跳轉到“下一題”,此時父控制項依然是被鎖定不能互動的。所以需要在“跳轉到下一題”的方法中,設定父控制項能互動。即

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

或者,最根本的是在添加option按鈕的那個方法中設定上面那句話:

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

(3)到了最後一題,雖然“下一題”按鈕被之前做了判斷不能點擊,但是如果答案答對了系統會繼續跳到下一題,這個時候依然會崩潰,所以需要做個判斷,如果是最後一題,則……彈框。

——以下語句的原理在於:如果我們正在回答的時最後一道題,那麼答對之後,它會繼續調用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>

——最後可以實現協議方法,也相當於可以實現監聽。比如下面這個按鈕可以監聽使用者點擊了哪個按鈕,並可以做一些反應,比如輸入是點擊了哪個按鈕序號。

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


(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;    }}




【iOS開發-56】案例BUG:按鈕的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.