系统控件和自定义控件

如下图创建一个导航视图控制器 三个场景,第二个场景和第三个有线连接modal

 

上面的Edit是一个item

中间那个的控制器

import UIKit

class EditModeTableviewControll: UITableViewController {
    
    
    
    var persons = Person.getDate()
    var per:Person?
    
    override func viewDidLoad() {
       
        super.viewDidLoad()
       //自定义的
        self.navigationItem.rightBarButtonItem=editButtonItem()
    }
    @IBAction func toEdit(sender: UIBarButtonItem) {
        tableView.setEditing(true, animated: true)
    }
    override func didReceiveMemoryWarning() {
       
        super.didReceiveMemoryWarning()
    }
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return persons.count
    }
    override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
        
        per = persons[indexPath.row]
        
        return indexPath
    }
    
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell=tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath:indexPath)
        
        let p=persons[indexPath.row]
        
        cell.textLabel?.text = p.name
       
        return cell
    }
//这个函数实现功能
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == .Delete { persons.removeAtIndex(indexPath.row) tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) }else{ let p = Person(name:"new") persons.append(p) tableView.insertRowsAtIndexPaths([NSIndexPath(forRow:indexPath.row+1,inSection:0)], withRowAnimation: .Fade) } }
//写行样式
override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { if indexPath.row == persons.count - 1{ return .Insert }else{ return .Delete } }
//跳转的时候传值
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { let dest = segue.destinationViewController as! myviewdetil dest.person=per! dest.persondel = self } } //进行刷新 extension EditModeTableviewControll : persondelegate { func person() { tableView.reloadData() } }

person 类

import Foundation
class Person{
    var name:String
    init(name:String){
     self.name = name
    
    }
    static func getDate()->[Person]{
     return [
        Person(name:"1111"),
        Person(name:"2222"),
        Person(name:"3333"),
        Person(name:"4444")
        
        
        ]
    
    
    }



}

第三个视图的

import UIKit

class myviewdetil: UIViewController {
    var person:Person?
    var persondel: persondelegate?
    
    @IBOutlet weak var mytxt: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        mytxt.text = person?.name
        
        
    }
    
    @IBAction func tojumplist(sender: UIButton) {
         person?.name = mytxt.text!
        persondel?.person()
        dismissViewControllerAnimated(true, completion: nil)
        
    }
}

delelegate

import Foundation
protocol persondelegate{


    func person()


}

 

上面的是系统的控件如下图写一个自定义的控件

这个是放图片的地方

 

如图创建一个场景

 

下面是场景的控制器

import UIKit

class mytableviewcontroll: UIViewController {
    
    @IBOutlet weak var rartingyou: RatingControll!
    @IBOutlet weak var mylable: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
       let vc = view.viewWithTag(1) as! RatingControll
        vc.startDe = self
       rartingyou.rating = 3
        mylable.text = "当前评价值指数:\(rartingyou.rating)星"
        // Do any additional setup after loading the view.
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
   

}
extension mytableviewcontroll : startdelegate {
    func Startcount(sender:RatingControll) {
       mylable.text = "当前评价值指数:\(sender.rating)星"
    }
}

视图里面的view控制器

import UIKit

class RatingControll:UIView{
var startDe:startdelegate?
  var rating = 0 //表示当前好评值
  var ratingcount = 5 //内部数量
  let spacing = 5 //表示按钮间的距离
  var buttons = [UIButton]()
    //把按钮创建出来
    required init?(coder aDecoder: NSCoder){
      super.init(coder:aDecoder)
        for _ in 0..<ratingcount {
            let btn = UIButton(frame: CGRect(x:0, y:0, width:44, height:44))
            btn.addTarget(self, action: "btnClicked:", forControlEvents: .TouchDown)
            btn.setImage(UIImage(named: "empty"), forState: .Normal)
             btn.setImage(UIImage(named: "filled"), forState: .Selected)
            btn.adjustsImageWhenHighlighted = false
            buttons.append(btn)
            addSubview(btn)
        }
    
    
    }
//代表星星的位置
override func layoutSubviews() { for (index,btn) in buttons.enumerate(){ btn.frame.origin.x = CGFloat((44 + spacing ) * index) } update() }
// func btnClicked(btn: UIButton) { rating
= buttons.indexOf(btn)!+1 update()
// 进行传參 startDe
?.Startcount(self) // print("bynclick") } //设置星星的样式 func update() { for (index,btn) in buttons.enumerate() { if index < rating { btn.selected = true }else { btn.selected = false } } }

startdelegate

import Foundation
protocol startdelegate{

    func Startcount(sender:RatingControll);

}

 

posted @ 2016-01-07 20:58  爱学习~天天学习  阅读(385)  评论(0编辑  收藏  举报