UIView和视图

UIView与视图

1.标签和按钮

class ViewController:UIViewController{
    var label:UILabel! //这个属性是strong的
    override func viewDidLoad(){
        super.viewDidLoad()
        
        let screen = UIScreen.main.bounds
        let labelWidth:CGFloat = 90
        let labelHeight:CGFloat = 20
        let labelTopView:CGFloat = 150
        let labelFrame = CGRect(x:(screen.size.width - labelWidth)/2,
                                y:labelTopView,
                                width:labelWidth,
                                height:labelHeight)
        self.label = UILabel(frame:labelFrame)
        self.label.text = "HelloWorld"
        self.label.textAlignment = .center
        self.view.addSubView(self.label)
        
        let button = UIButton(type:.system)//通过type属性创建button对象
        button.setTitle("OK",.normal)//设置UIButton某种状态下的title
        
        let buttonWidth:CGFloat = 60
        let buttonHeight:CGFloat = 20
        let buttonTopView:CGFloat = 240
        
        button.frame = CGRect(x:(screen.size.width - buttonWidth)/2,
                              y:buttonTopView,
                              width:buttonWidth,
                              height:buttonHeight)
        button.addTarget(self,action:#selector(onClick(_:)),for:.touchUpInside)//事件处理
        self.view.addSubView(button)
     
    }
}

❗在纯代码构建页面时,如果label的属性是weak的,那么执行创建label属性对象,但label对象的内存马上就会被释放。strong属性可以保持刚刚创建的对象内存不释放,视图控制器拥有label属性对象的所有权。

而在IB实现中label属性是weak,这是因为在IB实现时label视图是在故事板或者XIB文件中定义的,当应用程序启动时会根据故事板或者XIB文件的描述创建label等视图对象,对象所有权在故事板或者XIB,它们对label等视图对象是强引用的。由于对象所有权不是视图控制器,所以在视图控制器中使用它不能定义为strong,只能定义为weak

2.TextField和TextView

class ViewController:UIViewController,UITextFieldDelegate,UITextViewDelegate{
    /*如果ViewController只是实现委托协议,并不意味着ViewController真正成为TextField和TextView的委托对象,我们还需要将ViewController当前对象赋值给TextView和TextField控件的delegate的委托属性,否则委托方法不会被调用。*/
     override func viewDidLoad(){
        super.viewDidLoad()
         
         let screen = UIScreen.main.bounds
         let textFieldWidth:CGFloat = 223
         let textFieldHeight:CGFloat = 30
         let textFieldTopView:CGFloat = 150
         let textFieldFrame = CGREct(x:(screen.size.width - textFieldWidth)/2,
                                     y:textFieldTopView,
                                     width:textFieldWidth,
                                     height:textFieldHeight)
         let textField = UITextField(frame:textFieldFrame)
         textField.borderStyle = .roundedRect
         textField.delegate = self //将当前控制器self赋值给TextField控件的delegate委托属性
         self.view.addSubView(textField)
         
         let labelNameTextFieldSpace:CGFloat = 30
         let labelNameFrame = CGRect(x:textField.frame.origin.x,
                                     y:textField.frame.origin.y - labelNameTextFieldSpace,
                                     width:51,
                                     height:21)
         let labelName = UILabel(frame:labelNameFrame)
         labelName.text = "Name:"
         self.view.addSubView(labelName)
         
         let textViewWidth:CGFloat = 236
         let textViewHeight:CGFloat = 198
         let textViewTopView:CGFloat = 240
         let textView = UITextView(frame:
             CGRect(x:(screen.size.width - textViewwidth)/2,
                   y:textViewTopView,
                   width:textViewWidth,
                   height:textViewHeight)
         )
         textView.text = "please input……"
         textView.delegate = self
         self.view.addSubView(textView)
         
         let labelAbstractTextViewSpace:CGFloat = 30
         let labelAbstract = UILabel(frame:
                            CGRect(x:textView.frame.origin.x,
                            y:textView.frame.origin.y - labelAbstractTextViewSpace
                            width:103
                            height:21)
         )
         labelAbstract.text = "Abstract:"
         self.view.addSubView(labelAbstract)
     }
    //实现UITextFieldDelegate委托协议方法
    func textFieldShouldReturn(textField:UITextField)->Bool {
        textField.resignFirstResponder()//键盘打开
        print("got it!")
        return true
    }
    //实现UITextViewDelegate委托协议方法
    func textView(textView:UITextView,shouldChangeTextInRange range:NSRange,replacementText text:String)->Bool {
        if text == "\n"{
            textView.resignFirstResponder()//键盘打开
            return false
        }
        return true
    }
}

3.开关控件、分段控件和滑块控件

class ViewController:UIViewController{
    var leftSwitch:UISwitch!
    var rightSwitch:UISwitch!
    var sliderValue:UILabel!
      override func viewDidLoad(){
        super.viewDidLoad()
         let screen = UIScreen.main.bounds
          let switchScreenSpace:CGFloat = 39 //设置左右边距
          
          //添加rightSwitch控件
          self.rightSwitch = UISwitch()
          var frame = self.rightSwitch.frame
          frame.origin = CGPoint(x:switchScreenSpace,y:98)
          self.rightSwitch.frame = frame
          self.rightSwitch.isOn = true
          self.rightSwitch.addTarget(self,#selector(switchValueChanged(_:)),for:.valueChanged)
          self.view.addSubView(self.rightSwitch)
          
         //添加leftSwitch控件
           self.leftSwitch = UISwitch()
          frame = self.leftSwitch.frame
          frame.origin = CGPoint(x:(screen.size.width - (frame.size.width + switchScreenSpace),y:98)
          self.leftSwitch.frame = frame
          self.leftSwitch.isOn = true
          self.leftSwitch.addTarget(self,#selector(switchValueChanged(_:)),for:.valueChanged)
          self.view.addSubView(self.leftSwitch)     
                                 
          //添加segmentedControl控件
          let segments = ["right","left"]
          let segmentedControl = UISegmentedControl(items:segments)
          let scWidth:CGFloat = 220
          let scHeight:CGFloat = 29
          let scTopView:CGFloat = 186
          frame = CGRect(x:(screen.size.width - scWidth)/2,
                         y:scTopView,
                        width:scWidth,
                        height:scTopView)
           segmentedControl.frame = frame
           segmentedControl.addTarget(self,#selector(touchDown(_:)),for:.valueChanged)
           self.view.addSubView(segmentedControl)
                                 
           //添加slider控件
           let siderWidth:CGFloat = 300
           let silderHeight:CGFloat = 31
           ……
           slider.minimumValue = 0.0
           slider.maximumValue = 100.0
           slider.value = 50.00
           
           slider.addTarget(self,action:#selector(sliderValueChange(_:)),for:.valueChanged)
           self.view.addSubView(slider)
                                 
      }
          @objc func switchValueChanged(_ sender:AnyObject){
              let witchSwitch = sender as! UISwitch
              let setting = witchSwitch.isOn
              self.leftSwitch.setOn(setting,animated:true)
              self.rightwitch.setOn(setting,animated:true)
          }
          @objc func touchDown(_ sender:AnyObject){
              let segmentedControl = sender as! UISegmentedControl
              if self.leftSwitch.hidden == true {
                  self.rightSwitch.hidden = false
                  self.leftSwitch.hidden = false
              }else{
                   self.rightSwitch.hidden = true 
                   self.leftSwitch.hidden = true 
              }
          }
           @objc func sliderValueChange(_ sender:AnyObject){
           let slider = sender as! UISlider!
           let progressAsInt = Int(slider.value)
           let nextText = String(format:"%d",progressAsInt)
           self.slider.text = newText
           }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值