Swift自定义控件--输入框

在开发安卓项目的时候经常对于常用的功能进行封装成控件来使用,一个是减少代码量,另一个看起来简洁,而对于苹果开发也喜欢封装成控件,然后再storyboard里面拖拽,对于IOS开发自己属于菜鸟级别所以代码质量不是很高,如果那里有问题,请指出,这里记录一个是备忘另一个希望多多交流。

这篇是自定义输入框,输入框在项目中经常用到,最常见的比如左边是label右边是textfield,效果图如下:

代码如下

//
//  TextFieldValidator.swift
//  CustomWidget
//
//  Created by System Administrator on 15/3/21.
//  Copyright (c) 2015年 jwzhangjie. All rights reserved.
//

import UIKit

class TextFieldValidator : UIView{

    var txtFlag:UILabel!
    var txtFieldFlag:UITextField!
    var spacing:CGFloat?
    var delegate:UITextFieldDelegate?

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        txtFlag = UILabel()
        txtFieldFlag = UITextField()
    }

    func initWithFrame(labelText:NSString, text:NSString, placeholder:NSString, spacing:CGFloat){
        var width:CGFloat = frame.size.width;
        var height:CGFloat = frame.size.height;
        txtFlag = UILabel(frame: CGRectMake(0, 0, width / 3, height))
        txtFlag.backgroundColor = UIColor.clearColor()
        txtFlag.textAlignment = NSTextAlignment.Left
        self.spacing = spacing
        self.addSubview(txtFlag)

        txtFieldFlag = UITextField(frame: CGRectMake(width / 3 + spacing, 0, width-width/3 + spacing, height))
        txtFieldFlag.borderStyle = UITextBorderStyle.RoundedRect
        txtFieldFlag.clearButtonMode = UITextFieldViewMode.Always
        self.addSubview(txtFieldFlag)

        setText(text)
        setLabelText(labelText)
        txtFieldFlag.placeholder = placeholder
    }

    func initWithFrame(labelText:NSString, placeholder:NSString, spacing:CGFloat){
        return initWithFrame(labelText, text: "", placeholder: placeholder, spacing: spacing)
    }

    func initWithFrame(labelText:NSString, placeholder:NSString){
        return initWithFrame(labelText, text: "", placeholder: placeholder, spacing: 0)
    }

    func setDelegate(delegate:UITextFieldDelegate){
        self.delegate = delegate
        txtFieldFlag.delegate = delegate
    }

    func setLeftTextFlag(text:NSString){
        txtFlag.text = text
    }

    func setLabelText(text:NSString){
        txtFlag.text = text
    }

    func setText(text:NSString){
        txtFieldFlag.text = text
    }

    func getText()->NSString{
        return txtFieldFlag.text;
    }

    func setTxtFlagAlignment(option:NSTextAlignment){
        txtFlag.textAlignment = option
    }

    func setSpacing(spacing:CGFloat){
        self.spacing = spacing;
        txtFieldFlag.frame=CGRectMake(txtFlag.frame.size.width+spacing, 0, self.frame.size.width-txtFlag.frame.size.width-spacing, self.frame.size.height);
    }

    func setSecureTextEntry(option:Bool){
        txtFieldFlag.secureTextEntry = option
    }

    func setClearButtonMode(mode:UITextFieldViewMode){
        txtFieldFlag.clearButtonMode = mode
    }

    func setReturnKey(type:UIReturnKeyType){
        txtFieldFlag.returnKeyType = type
    }
}

//
//  ViewController.swift
//  CustomWidget
//
//  Created by System Administrator on 15/3/21.
//  Copyright (c) 2015年 jwzhangjie. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var userName: TextFieldValidator!

    @IBOutlet weak var userPasswd: TextFieldValidator!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        userName.initWithFrame("用户名", placeholder: "请输入用户名")
        userName.setReturnKey(UIReturnKeyType.Next)
        userPasswd.initWithFrame("密码", placeholder: "请输入用户密码")
        userPasswd.setSecureTextEntry(true)
        userPasswd.setReturnKey(UIReturnKeyType.Done)

    }

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

}

注意点:

如何将自定义控件加入storyboard?

由于自定义控件不是系统控件,所以能直接在Xcode中拖拽,首先需要拖拽自定义的父类,比如这里继承的是UIView,所以从Xcode中拖拽一个UIView到storyboard中,然后将UIView的class设置为自定义控件名称

查看类中的所有方法的快捷键?

在空白处,点击esc会显示出该类的所有方法

时间: 2024-10-21 01:14:50

Swift自定义控件--输入框的相关文章

Swift - 文本输入框(UITextField)的用法

1,文本框的创建,有如下几个样式: UITextBorderStyle.None:无边框 UITextBorderStyle.Line:直线边框 UITextBorderStyle.RoundedRect:圆角矩形边框 UITextBorderStyle.Bezel:边线+阴影 1 2 3 4 var textField = UITextField(frame: CGRectMake(10,160,200,30)) //设置边框样式为圆角矩形 textField.borderStyle = UI

Swift - 文本输入框内容改变时响应,并获取最新内容

1,问题描述 有时我们开发的时候需要先把“确认”按钮初始设置为不可用,当文本框中输入文字以后,再将输入按钮变为可用. 2,实现原理 (1)要检测文本框内容的变化,我们需要让新界面的Controller遵循一个文本协议UITextFieldDelegate. 同时在viewDidLoad方法内将文本框的代理设置为MainListController当前实例. 然后实现textFile的shouldChangeCharactersInRange方法就能在文本框将要变化的时候执行一些代码. (2)但这

如何在Swift中创建自定义控件

更新通知:这篇引导教程由Mikael Konutgan使用iOS 8和Swift语言重新制作,在Xcode6和7上测试通过.原始教程是由Colin Eberhardt团队制作的. 用户界面控件是许多应用的重要组成部分.使用这些控件,可以让用户查看应用的内容或与他们的应用进行交互.苹果提供了一个控件集,像UITextField, UIButton 和 UISwitch.灵活使用这些工具箱中已经存在的控件,可以让你创建各种各样的用户界面. 但是,有的时候你可能需要做一些与众不同的事情:库中的控件已经

Swift - 生成各种控件的工厂类(包含标签,按钮,输入框等)

在iOS开发中,页面里有时会大量的用到一些控件,如果要一个个单独创建再设置样式的话就显得很麻烦.我们可以创建一个生成各种控件的工厂类,这样在需要的时候调用下就可以了. 下面以一个自定义的工厂类为例,其中提供了文本标签,按钮,文本输入框,分段单选控件的生成,效果图如下: 工厂类:ViewFactory.swift 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

【转】swift实现ios类似微信输入框跟随键盘弹出的效果

swift实现ios类似微信输入框跟随键盘弹出的效果 为什么要做这个效果 在聊天app,例如微信中,你会注意到一个效果,就是在你点击输入框时输入框会跟随键盘一起向上弹出,当你点击其他地方时,输入框又会跟随键盘一起向下收回,二者完全无缝连接,那么这是怎么实现的呢,也许你会说直接在键盘弹出的时候把输入框也向上移动不就行了?但是我使用这种方法的时候,发现效果十分不理想,会有明显的滞后现象,原因有以下几点: 键盘弹出动画并不是匀速,键盘和输入框的时间曲线不完全一致,运动不同步 各种键盘的高度不一样(比如

Qt编写自定义控件68-IP地址输入框

一.前言 这个IP地址输入框控件,估计写烂了,网上随便一搜索,保证一大堆,估计也是因为这个控件太容易了,非常适合新手练手,一般的思路都是用4个qlineedit控件拼起来,然后每个输入框设置正则表达式过滤只能输入3位数字,然后安装事件过滤器识别回车自动跳到下一个输入框.关于如何设置正则表达式过滤,这个可以搜索查到,本人也不大懂这个规则,貌似还有专门的书籍专门介绍正则表达式,可能这块非常强大. 开源地址:https://gitee.com/feiyangqingyun/QWidgetDemo ht

Swift语言 代码添加文本输入框 和 占位文本

//懒加载文本输入框 private lazy var textView: UITextView = { let textView = UITextView() textView.font = UIFont.systemFontOfSize(18) textView.textColor = UIColor.darkGrayColor() //处理键盘,设置键盘的消失模式 textView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.

Swift开发教程--UITextField输入框如何隐藏软键盘

对于UITextField如何隐藏输入框,一直是初学者常遇到的问题. 在View试图中,点击选中UITextField控件,为其添加Did End On Exit实践.在事件中添加 sheShiTextField.resignFirstResponder()就可以了.在弹出软键盘之后,点击return就可以 隐藏软键盘了.

swift 纯代码自定义控件

1.创建自定义控件 import UIKit class CustomView: UIView { var lab:UILabel! var btn:UIButton! /************ 将需要添加的子控件在这里进行初始化 *****************************/ override init(frame: CGRect) { super.init(frame: frame) //初始化 lab = UILabel() lab.textAlignment = .cen