前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift| 基础语法(五)

Swift| 基础语法(五)

作者头像
進无尽
发布2018-09-12 17:34:58
2K0
发布2018-09-12 17:34:58
举报

前言

总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift有所帮助,同时也是对自己的一个总结。

Swift| 基础语法(一)

Swift| 基础语法(二)

Swift| 基础语法(三)

Swift| 基础语法(四)

Swift| 基础语法(五)

本文涉及:

  • 纯代码创建应用根试图
  • UILabel、UIButton、UIImageView的使用
  • UITableView的使用
  • UITableView的使用
  • 单例
  • 从相册选择照片或者拍照

一、纯代码创建应用根试图

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    // 创建UIWindow对象,并初始化该窗口的大小与主屏幕大小相同
    let rect : CGRect = UIScreen.main.bounds
    // 程序将创建的UIWindow对象赋值给该程序委托对象的window属性
    self.window = UIWindow(frame:rect)
    // 创建ViewController对象、并使用ViewController界面布局文件来
    // 初始化该视图控制器关联的用户界面
    let vc = ViewController()
    //通过控件加载视图
    //let vc = ViewController(nibName: "ViewController", bundle: nil)   bundle:nil];
    // 让该程序的窗口加载、并显示viewController视图控制器关联的用户界面
    self.window?.rootViewController = vc
    //设置背景颜色
    self.window?.backgroundColor = UIColor.white
    // 将该UIWindow对象设为主窗口、并显示出来
    self.window?.makeKeyAndVisible()
    return true
}

二、UILabel、UIButton、UIImageView的使用

    let mylabel = UILabel(frame:CGRect.init(x: 30, y: 100, width: 100, height: 30))
    mylabel.text = "标签"
    mylabel.backgroundColor = UIColor.orange
    mylabel.textColor = UIColor.black
    
    let but = UIButton.init(frame: CGRect.init(x: 30, y: 200, width: 50, height: 50))
    but.setTitle("按钮", for: .normal)
    but.backgroundColor = UIColor.gray
    but.addTarget(self, action: #selector(buttonClick(_:)), for: .touchUpInside)
    
    let imageV = UIImageView.init(frame: CGRect.init(x: 30, y: 300, width: 80, height: 80))
    imageV.image = UIImage.init(named: "xixi")
    
    let sc = UIScrollView.init(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height));
    sc.contentSize = CGSize.init(width: UIScreen.main.bounds.width, height: 1000)
    self.view.addSubview(sc)
    
    sc.addSubview(mylabel)
    sc.addSubview(but)
    sc.addSubview(imageV)

  //  按钮的点击事件
  @objc func buttonClick(_ button:UIButton) -> () {
        let butTitle:String = button.title(for: .normal)!
        print("按钮点击了: \(butTitle)")
    }

三、UITableView的使用

var myTb : UITableView?

override func viewDidLoad() {
    super.viewDidLoad()
    
    title = "Tb 测试"
    myTb = UITableView.init(frame: UIScreen.main.bounds)
    myTb?.dataSource = self
    myTb?.delegate = self
    myTb?.backgroundColor = UIColor.white
    view.addSubview((myTb)!)
    myTb?.tableFooterView = UIView()
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 100
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 60
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let indentifier = "myCell"
    var cell:MyNewTableViewCell? = tableView.dequeueReusableCell(withIdentifier: indentifier) as? MyNewTableViewCell
    if cell == nil {
        //自定义cell使用此方法
        cell = MyNewTableViewCell(style: .subtitle, reuseIdentifier: "cellId")
        //xib加载cell使用此方法
        // cell = Bundle.main.loadNibNamed("testCell", owner: nil, options: nil)?.last as? UITableViewCell
    }
    cell?.label1?.text = "label1 :\(indexPath.row)"
    cell?.label2?.text = "label2 :\(indexPath.row)"
    return cell!
}

在Swift中,创建tableViewCell的方法可以分为两种创建tableView时候注册和需要使用时手动创建。先聊聊创建tableView的时候直接注册cell:

myTb?.register(MyNewTableViewCell.self, forCellReuseIdentifier: "myCell")

当注册了Cell之后,在没有可重用的Cell时会自动创建,并且不能在需要时手动创建。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //创建cell,不需要判断是否为空,当没有可重用cell的时候会自动创建
    let cell:MyNewTableViewCell = (tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as? MyNewTableViewCell)!
    cell.label1?.text = "label1 :\(indexPath.row)"
    cell.label2?.text = "label2 :\(indexPath.row)"
    return cell
}

可以在自定义cell中处理点击状态下的显示

var label1 :UILabel?
var label2 :UILabel?

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    
    label1 = UILabel.init(frame: CGRect.init(x: 20, y: 10, width: 80, height: 20))
    label2 = UILabel.init(frame: CGRect.init(x: 20, y: 30, width: 80, height: 20))
    contentView.addSubview(label1!)
    contentView.addSubview(label2!)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

//点击情况下的显示处理
override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    if selected == true {
        contentView.backgroundColor = UIColor.yellow
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+0.4) {
            self.contentView.backgroundColor = UIColor.white
        }
    }
   
}

四、UITabBarController的使用

 func rootTabbarViewController() -> UITabBarController {
    
    // 首页
    let vc01 = ViewController()
    vc01.title = "首页"
    let nav01 = UINavigationController(rootViewController: vc01)
    // 发现
    let vc02 = UIViewController()
    vc02.title = "发现"
    let nav02 = UINavigationController(rootViewController: vc02)
    
    // 设置标题,未选中状态图标,选中状态图标
    let barItem01 = UITabBarItem(title: nil, image: UIImage(named: "TabBarItem_nomal_0")?.withRenderingMode(.alwaysOriginal), selectedImage: UIImage(named: "TabBarItem_light_0")?.withRenderingMode(.alwaysOriginal))
    vc01.tabBarItem = barItem01
    let barItem02 = UITabBarItem(title: nil, image: UIImage(named: "TabBarItem_nomal_1")?.withRenderingMode(.alwaysOriginal), selectedImage: UIImage(named: "TabBarItem_light_1")?.withRenderingMode(.alwaysOriginal))
    vc02.tabBarItem = barItem02
    
    let tabbarController = UITabBarController()
    tabbarController.tabBar.barTintColor = UIColor.white
    // 注意:视图控制器超过5个时(不包含5)会自动生成一个more视图标签,用来控制第5、6、...以后的视图控制器。
    tabbarController.viewControllers = [nav01, nav02]
    // 属性设置
    // 设置默认被选中视图控制器
    tabbarController.selectedIndex = 0;
    // 设置切换视图 tabBar 属性
    // 1 打开用户交互
    tabbarController.tabBar.isUserInteractionEnabled = true;
    // 2 设置背景颜色
    tabbarController.tabBar.backgroundColor = UIColor.black
    tabbarController.tabBar.barTintColor = UIColor.white
//        // 3 设置背景图片
//        tabbarController.tabBar.backgroundImage = UIImage(named: "")
//        // 4 选中时的背景图片
//        tabbarController.tabBar.selectionIndicatorImage = UIImage(named: "")
    
    // 设置字体颜色
    UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.gray], for: UIControlState.normal)
    UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.green], for: UIControlState.selected)
    // 设置字体大小
    UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont.systemFont(ofSize: 10.0)], for: UIControlState.normal)
    // 设置字体偏移
    //   UITabBarItem.appearance().titlePositionAdjustment = UIOffsetMake(0.0, -5.0)
    // 设置图标选中时颜色
    UITabBar.appearance().tintColor = UIColor.clear

    return tabbarController
}

这里特别说明下:默认未选中标签的图片和文字是灰色的,选中的是蓝色的,下面修改成橙色:

 //图片文字一起变色
 self.tabBar.tintColor = UIColor.orangeColor()

如何显示原始图片的颜色和图案? .imageWithRenderingMode(.AlwaysOriginal) 即可。

五、单例

class AppManager {
private static let _sharedInstance = AppManager()
 
class func getSharedInstance() -> AppManager {
    return _sharedInstance
}
  private override init() {} // 私有化init方法
}

//使用方式
AppManager.getSharedInstance()


为什么需要保证INIT的私有化? 

因为只有init()是私有的,才能防止其他对象通过默认构造函数直接创建这个类对象,确保你的单例是真正的独一无二。 
因为在Swift中,所有对象的构造器默认都是public,所以需要重写你的init让其成为私有的。
这样就保证像如下的代码编译报错,不能通过。

六、从相册选择照片或者拍照

import UIKit

class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {
    
    var uploadAlertController : UIAlertController?
    var pick:UIImagePickerController?
    var imageV :UIImageView?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.view.backgroundColor = UIColor.gray
        
        imageV = UIImageView.init(frame: CGRect.init(x: 30, y: 300, width: 80, height: 80))
        self.view.addSubview(imageV!)
        initAlertController()
        tapImage()
       
    }
    func initAlertController()
    {
        weak var blockSelf = self
        uploadAlertController = UIAlertController(title:nil, message: nil, preferredStyle:UIAlertControllerStyle.actionSheet)
        let takePhoto = UIAlertAction(title:"拍照", style:UIAlertActionStyle.default) { (action:UIAlertAction)in
            blockSelf?.actionAction(action: action)
        }
        let photoLib = UIAlertAction(title:"从相册选择", style:UIAlertActionStyle.default) { (action:UIAlertAction)in
            blockSelf?.actionAction(action: action)
        }
        let cancel = UIAlertAction(title:"取消", style:UIAlertActionStyle.cancel) { (action:UIAlertAction)in
            blockSelf?.actionAction(action: action)
        }
        uploadAlertController?.addAction(takePhoto)
        uploadAlertController?.addAction(photoLib)
        uploadAlertController?.addAction(cancel)
    }
    func tapImage(){
        present(uploadAlertController!, animated:true, completion: nil)
        initImagePickerController()
    }
    func initImagePickerController()
    {
        pick = UIImagePickerController()
        pick?.delegate = self
        // 设置是否可以管理已经存在的图片或者视频
        pick?.allowsEditing = true
    }
    func actionAction(action:UIAlertAction)
    {
        if action.title == "拍照" {
            self.getImageFromCamera(type: .camera)
        }else if action.title == "从相册选择" || action.title == "更换头像" {
            self.getImageFromPhotoLib(type: .photoLibrary)
        }
    }
    //拍照
    func getImageFromCamera(type:UIImagePickerControllerSourceType)
    {
        
        pick?.sourceType = type
        self.present(pick!, animated: true, completion:nil)
    }
    //相册选择
    func getImageFromPhotoLib(type:UIImagePickerControllerSourceType)
    {
        pick?.sourceType = type
        self.present(pick!, animated: true, completion:nil)
    }
    //MARK:- UIImagePickerControllerDelegate
    func imagePickerController(_ picker:UIImagePickerController, didFinishPickingMediaWithInfo info: [String :Any]){
        
        let type:String = (info[UIImagePickerControllerMediaType]as!String)
        //当选择的类型是图片
        if type == "public.image"
        {
            let img = info[UIImagePickerControllerOriginalImage]as?UIImage
            imageV?.image = img
        }
        picker.dismiss(animated:true, completion:nil)
    }
    
    func imagePickerControllerDidCancel(_ picker:UIImagePickerController){
        picker.dismiss(animated:true, completion:nil)
    }
    
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.05.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、纯代码创建应用根试图
  • 二、UILabel、UIButton、UIImageView的使用
  • 三、UITableView的使用
  • 四、UITabBarController的使用
  • 五、单例
  • 六、从相册选择照片或者拍照
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档