我希望用户输入5个关于他自己的详细信息,但我不想使用枯燥的5文本字段表单。我希望用户一次看到一个文本字段 - >单击按钮并移至下一个文本字段。 我的问题是,我必须为此使用5个viewcontrollers吗?我正试图找到一种更优雅的方式。
我为每个使用过的文本字段考虑了类似setHidden:YES
的内容,但它没有动画,看起来有点难看所以我正在寻找替代方案。
答案 0 :(得分:1)
我认为您应该只使用一个UIViewController
(DetailViewController)
和一个UIView
作为容器(DetailViewContainer)
,此容器包含您的5个详细UIView
{{1 }}。如果您想在每个(DetailView)
之间进行特定的过渡动画,则可以在DetailView
内实现过渡动画。
如果我要做同样的任务,我会按照以下方式完成:
DetailViewContainer
答案 1 :(得分: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)发件人操作。如果您决定坚持“每个控制器一个问题”的想法,这应该足以让您前进。
就像我说的那样,我并不是在考虑什么类型的设计是最好的。我只是说如果你想按照你描述的方式去做...这将使你不必创建一堆类似的控制器。
希望这有帮助!
答案 2 :(得分:0)
每页应使用一个ViewController 如果您的文本字段位于同一页面上,那么您应该使用一个带有5个子视图的viewController。
使用view setHidden
,但是如果你想要动画,那么简单的动画为全透明色(使用view.alpha = 0.0
),然后隐藏。
答案 3 :(得分:0)
你真的可以疯狂,并使用IBoutletCollection
和你的5 UITextFields
。然后,您可以轻松管理要显示的正确UITextField
(基于问题索引):
Question 1 => UITextField (0)
Question 2 => UITextField (1)
然后你可以使用Wojtek建议的东西:带有一些效果的漂亮动画。
答案 4 :(得分:0)
单个文本字段和标签(针对问题)可以。每当新问题到期时,您的单个视图控制器可以更改问题并清空文本字段。没有必要麻烦4个隐藏的视图/视图对和1个可见。
如果你想“免费”购买一些基本动画,那就选择启用分页的UISlider,携带5对标签和文本字段。
答案 5 :(得分:-1)
如果您想要简单的淡入/淡出过渡,可以这样做
[UIView animateWithDuration:duration animations:^{
if(something)
//fade in
view.alpha = 1.f;
else {
//fade out
view.alpha = 0.f;
view.hidden = YES;
}];