標籤: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