在iOS开发中使用子视图的问题
我一直在努力尝试在iOS开发中使用子视图。我一直试图通过将所有UI和布局代码放在子视图中来遵循最佳实践,但这对我来说相当棘手,我需要一个关于如何正确进行此操作的答案,因为我似乎无法在网上找到任何可以直接回答我问题的内容 我有一个在背景中有一张图片的视图,两个要自定义的文本字段和一个自定义的按钮,按钮周围有一个白色边框。我的子视图模糊了背景,设计了两个文本字段和按钮,所有这些都显示在一个XIB文件中。我将此视图连接到情节提要上的视图,我需要能够控制从情节提要上uiview文件显示的按钮到我的viewController的拖动,以创建按钮的操作。viewController文件属于情节提要上的视图,而不是XIB文件中的视图。因此,我在我的子视图文件中有一个按钮的出口连接,我需要在我的viewController文件中为该按钮建立一个操作连接。显然我不能这样做,因为那个按钮是XIB文件的一部分。如果有人能告诉我如何通过使用子视图和故事板来实现这一点,这样我就可以设计这个按钮,但也可以在viewController文件中使用它来执行操作,同时仍然遵循MVC模式?如果我在这件事上做错了什么,任何单独的建议都将不胜感激 以下是子视图代码:在iOS开发中使用子视图的问题,ios,swift,uiview,viewcontroller,subview,Ios,Swift,Uiview,Viewcontroller,Subview,我一直在努力尝试在iOS开发中使用子视图。我一直试图通过将所有UI和布局代码放在子视图中来遵循最佳实践,但这对我来说相当棘手,我需要一个关于如何正确进行此操作的答案,因为我似乎无法在网上找到任何可以直接回答我问题的内容 我有一个在背景中有一张图片的视图,两个要自定义的文本字段和一个自定义的按钮,按钮周围有一个白色边框。我的子视图模糊了背景,设计了两个文本字段和按钮,所有这些都显示在一个XIB文件中。我将此视图连接到情节提要上的视图,我需要能够控制从情节提要上uiview文件显示的按钮到我的vie
@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类创建按钮出口的操作@泉塔里铝土矿