您的位置:首页 > 其它

系统控件和自定义控件

2016-01-07 20:58 253 查看
如下图创建一个导航视图控制器 三个场景,第二个场景和第三个有线连接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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: