2012-12-12 48 views
2

我希望用戶輸入5個關於自己的細節,但我不想使用無聊的5個文本框。我希望用戶一次看到一個文本字段 - >單擊該按鈕並移至下一個文本字段。 我的問題是,我必須使用5個viewcontrollers嗎?我試圖找到更優雅的方式。我可以使用一個viewController而不是5嗎?

對於每個使用過的文本字段,我都想過類似setHidden:YES的東西,但它不是動畫,看起來有點醜,所以我正在尋找替代方法。

+0

您可以使用帶分頁設置的UIScrollView啓用 –

+0

您可以使用非常簡單的動畫。 檢查我的答案http://stackoverflow.com/a/11934604/1032151 –

+0

爲什麼你需要5個不同的文本字段?使用顯示要插入的細節標題的標籤,然後當用戶插入標籤時,只需更改標籤的標題並使用相同的文本字段。 –

回答

1

我認爲你應該只有一個UIViewController(DetailViewController)一個UIView集裝箱(DetailViewContainer)使用,這個容器握着你的5詳細UIView(DetailView)。如果您想要在每個DetailView之間進行特定的過渡動畫,則可以在DetailViewContainer之內實施您的過渡動畫。

如果我應該做同樣的任務,因爲你我會做下列方式:

typedef enum 
{ 
    firstDetailView, 
    secondDetailView, 
     ... 
}DetailViewType; 

@protocol DetailViewDelegate <NSObject> 

- (void)detailViewDidEndEditingWithValue:(NSString)value detailViewType:(DetailViewType)detailViewType; 

@end 

// 

@interface DetailViewController : UIViewController <DetailViewDelegate> 
@end 

@implementation DetailViewController 
- (void)detailViewDidEndEditingWithValue:(NSString)value detailViewType:(DetailViewType)detailViewType 
{ 
    //save new detail to model here 
} 
@end 

// 

@interface DetailView : UIView 
@property(nonatomic, weak) id<DetailViewDelegate> delegate; 
@end 

@implementation DetailView 
- (void)saveDetailValue 
{ 
    [delegate detailViewDidEndEditingWithValue:self.value detailViewType:self.type]; 
} 
@end 
-1

如果你想簡單的淡入/淡出過渡,你可以這樣來做

[UIView animateWithDuration:duration animations:^{ 
    if(something) 
    //fade in 
    view.alpha = 1.f; 
    else { 
    //fade out 
view.alpha = 0.f; 
    view.hidden = YES; 
}]; 
+0

你確定它應該是'[UIView animateWithDuration:duration動畫:^ {'? – Segev

+0

是的,我是,你爲什麼問? – wczekalski

0

如果你的文本框是在同一頁上,您應該使用每個頁面
一個視圖控制器,那麼你應該使用一個帶有5個子視圖的viewController。

使用view setHidden,但如果您想動畫,然後簡單動畫到全透明顏色(使用view.alpha = 0.0),然後隱藏。

0

你可以真的瘋了,並使用類似IBoutletCollection與你的5 UITextFields。然後,您可以輕鬆地管理什麼正確的UITextField顯示(基於問題的指標):

Question 1 => UITextField (0) 
Question 2 => UITextField (1) 

然後,您可以用什麼WOJTEK建議:一個漂亮的動畫有一定的影響。

1

所以有噸的,你可以處理這個辦法,但具體回答你的問題有關不必使用5個視圖控制器...不。你不需要。你可以創建一個說...「QuestionViewController」來處理顯示問題,然後不斷將新控件的實例推到導航棧上,並帶有不同的問題。

.H

@interface QuestionViewController : UIViewController 

@property (nonatomic, strong) NSString *question; 

- (IBAction) nextQuestion:(id)sender; 

@end 

.M

#import "QuestionViewController.h" 
#import "AppDelegate.h" 


@implementation QuestionViewController 

@synthesize question = _question; 


- (IBAction)nextQuestion:(id)sender 
{ 
    AppDelegate *delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate]; 

    QuestionViewController *vc = [[QuestionViewController alloc]  initWithNibName:@"QuestionViewController" 
                      bundle:nil]; 

    vc.question = [delegate getNextQuestion]; 

    [self.navigationController pushViewController:vc 
             animated:YES]; 
} 

@end 

所以在我的例子中,應用程序的委託將管理這些問題隨之而來的,然後這個問題的觀點控制器將簡單地取下一個問題並將其自身的新實例推送到視圖堆棧中。您可以將一個按鈕連接到nextQuestion:(id)發件人操作。如果你決定堅持「每個控制器一個問題」的想法,這應該足以讓你繼續前進。

就像我說過的,我沒有考慮什麼類型的設計是最好的。我只是說,如果你想按照你所描述的方式來做...這會讓你不必創建一堆類似的控制器。

希望這會有所幫助!

0

單個文本字段和標籤(對於問題)會做。每次發生新問題時,您的單個視圖控制器都可以更改問題並清空文本字段。沒有必要與4隱藏的意見/視圖對和1可見。

如果您想要免費獲得一些基本的動畫,請使用帶有分頁功能的UISlider,並帶有5對標籤和文本字段。

相關問題