中和软件技术培训

上海中和软件公司培训专用博客

微信模仿程序的技术使用

微信模仿程序的技术使用


微信UI模仿程序需要使用的技术总结  (2017/09/21)

开发各阶段问题都会在这里进行总结。

 

1.TabViewController

使用TabViewController,可以建立起一个微信界面的初始框架。

UITabBarItem的设定:

  • title:设定文字
  • image:设定图片
  • badge:设定小圆点里面的文字

注意:这里的图片格式是特定的PNG格式。大小也有要求。这里从Github上的项目中盗图(直接拷贝图片资源)

关于选中Tab的图片处理:

mBarItem.selectedImage = mBarItem.selectedImage?.withRenderingMode(.alwaysOriginal)

 

如果使用代码加载图片,例子如下

 

cell.imgFace.image = UIImage(named: "Name Of Content")

 

关于图片资源位置:

请放在 Asserts  xcassets下面,不要放错了

如果出现图片在运行时无法显示的问题,请考虑是不是图片位置不对 

图片资源拷贝的时候,可以直接在finder里面进行操作。注意Mac里面拷贝和复制的区别。

拷贝是实实在在的复制文件!Finder修改之后,XCode 会自动更新的

 

关于工程文件夹,

XCode9开始,默认新建分组的时候,物理文件夹也会建立起来的。如果你只是想虚拟分组,请选择Add Group Without Folder。

 

可以使用GlobalHint来修改选中项目的颜色。

在调色板中使用屏幕取色获取指定颜色

 

2.TableViewController

使用TableViewController替换原来的UIViewController即可

设定Cell的高度

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
        return 72.0
    }

 注意:一定要在设计界面上设定ReUseId !

 

一个完整的例子:

 

let ImageDic = [0:"杨幂",1:"邓紫棋"]
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return ImageDic.count
    }

    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell :ChatListTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ChatListItem", for: indexPath) as! ChatListTableViewCell

        // Configure the cell...
        cell.imgFace.image = UIImage(named: ImageDic[indexPath.row]!)
        return cell
    }
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
        return 72.0
    }

 

3.Segue

这里系统控制了Tab之间的切换,但是Tab页面内部的切换还是靠Segue来控制的

请一定使用RelashionShip进行Segue的设定(一般的Segue迁移使用Show即可)

 

注意:在prepare方法里面,不可以直接对于目标ViewController的UIView进行赋值,原因是这个时候UIView控件还没有准备好

正确的做法是,先对于属性赋值,在ViewDidLoad的时候,对于控件进行赋值

 

例如:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let btn = sender as! UIButton
        if let chatcell = btn.superview?.superview as? ChatListTableViewCell
        {
            if let UserDetailView = segue.destination as? UserDetailViewController{
                UserDetailView.UserFaceImage = chatcell.imgFace.image!
                UserDetailView.UserInfoText = "xxx"
            }
        }
    }

 

在UserDetailViewController中:

 

    @IBOutlet weak var UserInfo: UILabel!
    @IBOutlet weak var UserFace: UIImageView!
    
    var UserFaceImage : UIImage?
    var UserInfoText : String?
    

    override func viewDidLoad() {
        super.viewDidLoad()
        UserFace.image = UserFaceImage
        UserInfo.text = UserInfoText
        // Do any additional setup after loading the view.
    }

 

Cocoapods 的使用 

Github上的Demo (希望大家可以下载到本地运行一下)Swift 3开发的,迁移到Swift4也没有很大问题:

https://github.com/hilen/TSWeChat

 

博文最后更新时间:


评论

  • 暂无评论

发表评论

博客统计

访问量:12695

博文总数:13 评论总数:6

原创12 翻译0 转载1