Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS开发中使用子视图的问题_Ios_Swift_Uiview_Viewcontroller_Subview - Fatal编程技术网

在iOS开发中使用子视图的问题

在iOS开发中使用子视图的问题,ios,swift,uiview,viewcontroller,subview,Ios,Swift,Uiview,Viewcontroller,Subview,我一直在努力尝试在iOS开发中使用子视图。我一直试图通过将所有UI和布局代码放在子视图中来遵循最佳实践,但这对我来说相当棘手,我需要一个关于如何正确进行此操作的答案,因为我似乎无法在网上找到任何可以直接回答我问题的内容 我有一个在背景中有一张图片的视图,两个要自定义的文本字段和一个自定义的按钮,按钮周围有一个白色边框。我的子视图模糊了背景,设计了两个文本字段和按钮,所有这些都显示在一个XIB文件中。我将此视图连接到情节提要上的视图,我需要能够控制从情节提要上uiview文件显示的按钮到我的vie

我一直在努力尝试在iOS开发中使用子视图。我一直试图通过将所有UI和布局代码放在子视图中来遵循最佳实践,但这对我来说相当棘手,我需要一个关于如何正确进行此操作的答案,因为我似乎无法在网上找到任何可以直接回答我问题的内容

我有一个在背景中有一张图片的视图,两个要自定义的文本字段和一个自定义的按钮,按钮周围有一个白色边框。我的子视图模糊了背景,设计了两个文本字段和按钮,所有这些都显示在一个XIB文件中。我将此视图连接到情节提要上的视图,我需要能够控制从情节提要上uiview文件显示的按钮到我的viewController的拖动,以创建按钮的操作。viewController文件属于情节提要上的视图,而不是XIB文件中的视图。因此,我在我的子视图文件中有一个按钮的出口连接,我需要在我的viewController文件中为该按钮建立一个操作连接。显然我不能这样做,因为那个按钮是XIB文件的一部分。如果有人能告诉我如何通过使用子视图和故事板来实现这一点,这样我就可以设计这个按钮,但也可以在viewController文件中使用它来执行操作,同时仍然遵循MVC模式?如果我在这件事上做错了什么,任何单独的建议都将不胜感激

以下是子视图代码:

@IBDesignable class SignUpView: UIView {

@IBOutlet weak var usernameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var signUpButton: UIButton!
@IBOutlet weak var image: UIImageView!

var view: UIView!

override init(frame: CGRect) {
    super.init(frame: frame)
    configure()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    configure()
}

func configure() {
    view = loadViewFromNib()
    view.frame = bounds
    view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]

    //Add blur
    self.view.backgroundColor = UIColor.clearColor()
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = self.view.bounds
    blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]

    self.image.addSubview(blurEffectView)

    //Design text fields
    designTextField(usernameTextField, placeHolder: "Choose username")
    designTextField(passwordTextField, placeHolder: "Choose password")

    signUpButton.layer.cornerRadius = 5
    signUpButton.layer.borderWidth = 2
    signUpButton.layer.borderColor = UIColor(white: 1.0, alpha: 0.7).CGColor

    addSubview(view)
}

func designTextField(textField: UITextField, placeHolder: String) {
    textField.backgroundColor = UIColor.clearColor()
    textField.borderStyle = UITextBorderStyle.None
    textField.attributedPlaceholder = NSAttributedString(string: placeHolder, attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])

}

func addBorder(textField: UITextField) {
    let border = CALayer()
    let width = CGFloat(2.0)
    border.borderColor = UIColor.whiteColor().CGColor
    border.opacity = 0.7 as Float
    border.frame = CGRect(x: 0, y: textField.frame.size.height - width, width:  textField.frame.size.width, height: textField.frame.size.height)
    border.borderWidth = width
    textField.layer.addSublayer(border)
    textField.layer.masksToBounds = true
}


func loadViewFromNib() -> UIView {

    let bundle = NSBundle(forClass: self.dynamicType)
    let nib = UINib(nibName: "SignUpView", bundle: bundle)
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView

    return view
    }
}
和viewController代码:

class SignUpViewController: UIViewController, UITextFieldDelegate {

//The action below needs to be connected to the button from the subview file
@IBAction func toggleSignUpButton(sender: AnyObject) {

}

func displayAlert(title: String, message: String) {
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
    self.presentViewController(alert, animated: true, completion: nil)
}


override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }
}

我想你忘了在“下面是:@quantaliinuxit”之后要说的内容:@quantaliinuxit关于XIB的方法(请记住,在进行XIB之前,你应该首先习惯于故事板,并将视图直接构建到故事板中)如下:1-在XIB中构建视图。2-创建UIVIew子类-例如“UIViewSub”3-将XIB文件所有者设置为“UIViewSub”4-覆盖UIViewSub的init:coder和init:frame方法,在它们中从Nib加载自定义视图,并将UIViewSub的
视图
属性设置为自定义视图。5-您现在有了一个可重用的视图对象!要在视图控制器中使用它,只需创建UIViewSubOk right的一个新实例,因此我想访问在视图控制器的“UIViewSub”中创建的按钮。因此,如果在视图控制器中创建UIViewSub的新实例,如何访问该按钮,然后在视图控制器中为其创建操作@QuantaliinuxiteYou将插座连接到UIViewSub类,然后直接在控制器中访问这些插座。例如,只需连接您的IBOutlet,将其称为rightButton,然后在UIVIewController中调用mysub.rightButton.setTarget:不确定我是否可以这样做,例如,让我们假设我在我的视图控制器文件中声明了这个变量:var subView=UIViewSub()然后从这里我如何从UIViewSub类创建按钮出口的操作@Quantaliinuxiti我想你忘了在“下面是:@Quantaliinuxit”之后要说什么:“@Quantaliinuxit关于XIB的方法(请记住,你应该首先习惯故事板,在进行XIB之前直接在故事板中构建视图)如下:1-在XIB中构建视图。2-创建UIVIew子类-例如“UIViewSub”3-将XIB文件所有者设置为“UIViewSub”4-覆盖UIViewSub的init:coder和init:frame方法,在它们中从Nib加载自定义视图,并将UIViewSub的
视图
属性设置为自定义视图。5-您现在有了一个可重用的视图对象!要在视图控制器中使用它,只需创建UIViewSubOk right的一个新实例,因此我想访问在视图控制器的“UIViewSub”中创建的按钮。因此,如果在视图控制器中创建UIViewSub的新实例,如何访问该按钮,然后在视图控制器中为其创建操作@QuantaliinuxiteYou将插座连接到UIViewSub类,然后直接在控制器中访问这些插座。例如,只需连接您的IBOutlet,将其称为rightButton,然后在UIVIewController中调用mysub.rightButton.setTarget:不确定我是否可以这样做,例如,让我们假设我在我的视图控制器文件中声明了这个变量:var subView=UIViewSub()然后从这里我如何从UIViewSub类创建按钮出口的操作@泉塔里铝土矿