【问题标题】:hiding and adjusting of textfields based on view iOS基于视图iOS的文本字段隐藏和调整
【发布时间】:2016-01-30 23:57:44
【问题描述】:

我对 iOS 很幼稚。我正在开发一个注册页面,其中包括基于视图隐藏文本字段。为了实现这一点,我为视图实现了 UISegmentedControl,并使用以下代码基于段隐藏文本字段

- (IBAction)regSegmentButton:(id)sender {

if (_registrationSegment.selectedSegmentIndex ==1) {
    self.vendorID.hidden = NO;
}
else {
    self.vendorID.hidden = YES;
}

}

即使我达到了我的预期,但这种观点是荒谬的。视图如下图所示

我的问题是如何使视图看起来正常,即使隐藏了与“vendorscreen.png”(第二张图片)中表示的方式相同的字段。我是否需要应用任何动画才能实现它?如果是,请告诉我该怎么做

请做必要的事情..

【问题讨论】:

  • 嗨,@ashwin,你如何布局你的视图?你使用自动布局吗?
  • 您可能会发现将视图控制器设计为 UITableViewController 会更容易。您可以有 3 个原型单元格(“分段控制单元格”、“文本字段单元格”、“注册按钮单元格”),并通过在 UITableViewDataSource 中实现 tableView:cellForRowAtIndexPath: 方法在运行时创建和格式化它。由于 UITableView 是 UIScrollView 的子类,因此您不必担心手动管理滚动内容大小/插入内容。
  • @AlexanderTkachenko 感谢您的回复。是的,我使用了自动布局。如前所述,如果您能给我一个基本的示例代码,我什至对 iOS 也很幼稚,这将很有帮助
  • @n00neimp0rtant 感谢您的回复,我可能能够实施您的回复,但由于我是这个开发的新手,对我来说根据我的要求调整所有这些可能有点高。仍然感谢您的友好回复

标签: ios objective-c uiviewcontroller uisegmentedcontrol


【解决方案1】:

您可以使用/不使用动画来做到这一点。这是没有动画的步骤。您必须将您的电子邮件 ID、密码、确认密码和注册按钮添加到普通 UIView,例如:view1,然后当您更改开关时,您必须调整 view1 的“y”位置。如下所示

- (IBAction)regSegmentButton:(id)sender {

    if (_registrationSegment.selectedSegmentIndex ==1) {
        self.vendorID.hidden = NO;
    }
    else {
        self.vendorID.hidden = YES;
    }

    int y = (_registrationSegment.selectedSegmentIndex == 1) ? 200 : 150
    CGRect rect = self.view1.frame;
    rect.origin.y = y;
    self.view1.frame = rect;
}

我刚刚对值进行了硬编码以供理解,您需要根据您的观点调整 y 值。

【讨论】:

  • 他想为它制作动画
  • @GalMarom,谢谢。已编辑
  • @vijay 谢谢你的回应动画或没有动画对我来说很好,但我对你正在解释的这种方法有点天真请通过我的故事板层次结构链接 [故事板层次结构] ( s11.postimg.org/ajruwronn/storyboardhierarchy.png) 并让我知道如何进行下一步
  • 我了解您的限制是通过风险投资设置的。隐藏此字段时会出现问题。将所有四个元素移至 view1 后,您需要以编程方式在 regSegmentButton 方法中将约束设置为 view1。
  • @Vijay 你要求我在我的背景中创建另一个视图,然后添加文本字段和按钮。稍后你想让我添加你的代码是这样吗..?
【解决方案2】:

一种解决方案是:您可以拥有一个包含所有底部 UITextField 的 UIView。 您所要做的就是将新视图设置为隐藏视图位置的动画。

    [UIView animateWithDuration:0 animations:^(){
    textFieldContainers.frame = CGRectMake(textFieldContainers.frame.origin.x, textFieldContainers.frame.origin.y - vendorIDTextField.frame.size.height, textFieldContainers.frame.size.width, textFieldContainers.frame.size.height);
}];

另一个是使用约束(将“静态”视图封装在一个视图容器中也将有助于此解决方案)

【讨论】:

  • 感谢您的回复,如果可能的话,请通过我的故事板层次结构 (s11.postimg.org/ajruwronn/storyboardhierarchy.png) 帮助我了解如何实施这种方法。
  • 创建一个 UIView 并在其中添加电子邮件和注册之间的所有字段(只需将它们拖到视图中)。在你的 UIViewController 类中为这个视图创建一个插座。当你想为这个视图设置动画时,只需调用我发布的代码即可。
  • 我已按照您的建议实现了它,但我得到以下结果作为输出 (s14.postimg.org/6vwt6mv7l/endoutput.png) 请通过代码 sn-p (s4.postimg.org/kx6j3pmhp/codeforoutput.png) 并让我知道我要去哪里错了
  • 你不改变y。您将帧设置为与以前相同的动画。此外,持续时间为 0,因此它将立即生效,并且不会真正显示任何动画。尝试更改 y 位置(CGRectMake 中的第二个元素并遵循其行为)
【解决方案3】:

enter image description here引用 gal marom 的答案,您还可以将剩余的 TextFields 放在 UIView [on storyboard] 中并使用从它到分段视图的约束,然后您应该单击顶部约束本身 [约束到分段视图]并在您的代码中创建它的出口,然后在您的分段操作条件下执行以下操作:

块引用

@IBOutlet weak var fullnameTF: UITextField!//* by itself

@IBOutlet weak var userEmail: UITextField! //* in the same UIView

@IBOutlet weak var userPassword: UITextField! //* in the same UIView

@IBOutlet weak var viewStackTopCont: NSLayoutConstraint!

@IBAction func segAction(_ sender: Any) {
    if seg.selectedSegmentIndex == 0 {

        fullnameTF?.isHidden = true
        viewStackTopCont.constant = 20 // after the TextField is hidden

    }else if seg.selectedSegmentIndex == 1{
        fullnameTF?.isHidden = false
        viewStackTopCont.constant = 60 //your current constraint margin
    }
}

Blockquote

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2021-07-22
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多