iOS学小程序从0到发布(适合iOS开发看)

Emmmm,最近一波失业潮。富某康、某团、摩某、京某、知某、某浪、58 某大面积裁员,那么在这个千钧一发之际,单纯iOS开发也着实不好过,回过头看一下,裁掉的都是单一选手,为了节约成本公司留下的都是身兼多职的全栈开发工程师。

那么iOS, 有些选手就要找对方向再学一手以备下次被裁员的不是自己。HTML,CSS, JS,小程序,React, React Native浮现在选手面前。 好,进入正题,今天开始从0入门小程序。咦,等等,为什么叫选手呢,因为当前环境下经济不景气都是去竞争口饭吃的,就像是在比赛,故本文称之为选手。

首先,学习小程序开发对于学习iOS开发成本实在是低,低到什么程度呢?低到你单看这篇文章就可以开发并发布小程序。

一:小程序注册

注册小程序帐号

在微信公众平台官网首页(mp.weixin.qq.com)点击右上角的“立即注册”按钮。

关于小程序账号注册填写从相关的各位选手可以去微信公众平台自己看官方文档这里不做详细介绍https://developers.weixin.qq.com/miniprogram/introduction/index.html

image

二:这篇文章重点要介绍的是开发工具和代码方面的知识。

微信开发工具下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

那么现在我已经下载好了

image

点击小程序项目,进入

image

如图,我这是之前已经创建好的项目,会显示在图上右边,如果是本地没有小程序项目,则创建就可以了,相信我们的iOS开发们这些都不是事,emm不行,怕有些 人还是不会,老规矩上图

image

好,终于看到代码了,到这里才是本文接下来要讲的重点。

先来看下我们今天要实现的效果。

image

再来整体看下代码架构

image

先来看四种文件,.js, .json,.wxss,.wxml。

.js处理逻辑,数据,获取网络请求的数据即在这里面

.json 配置文件,比如tabbar的配置,navigationbar的配置等

.wxml创建的控件,比如view,button,map组件

.wxss控件的修饰,比如frame,backgroudcolor等

看到这里是不是感觉有点跟MVVM设计模式相似呀,不同功能的代码分文件来写,一目了然。

好,先看示例首页搜索页面的输入框。

.wxml里

<input class="searchPut" bindconfirm="shouldDone" placeholder="输入来搜索🔍" type="text" confirm-type="Search">
</input>
<view class="table">
  <view class='contentview' wx:for="{{searchResults}}" wx:for-index="bindex">
   <view class="listitem"  bindtap='didSelectCell'  data-bindex='{{bindex}}'>
     <image class="img" src="{{item.cover_path}}"></image>
      <view class="right">
          <view class="name">{{item.title}}</view>
          <view class="nameDes">{{item.intro}}</view>
          <view class="bottomView">
           <view class='playtimes'>播放次数:{{item.play}}</view>
           <view class='length'>总共:{{item.tracks}}集</view>
          </view>
      </view>
    </view>
  </view>
</view>

如图不同颜色框对应不同UI组件


image.png

.wxss

.searchPut
{
  margin-left: 20rpx;
  margin-right: 20rpx;
  height: 60rpx;
  border: 2rpx ridge black;
}

.table
{
  top: 80rpx;
  width: 100vw;
  margin-bottom: 0rpx;
}

.contentview
{
  padding: 0;
}

.listitem{  
  display: flex;  
  flex-direction: row;  
  padding:20rpx;  
}

.img
{
  width: 100rpx;
  height: 100rpx;
}

.right
{
  flex: 1;
  width: 590rpx;  
  margin-left: 20rpx;  
  display: flex;  
  flex-direction: column;  
}

.name
{
  font-size: 35rpx;
}
.nameDes
{
  font-size: 30rpx;
}

.bottomView
{
  flex: 1; 
  display: flex;  
  flex-direction: row;  
  justify-content:space-between;
}

.playtimes
{
  font-size: 30rpx;
  color: gray;
  vertical-align: center;
}

.length
{
  font-size: 30rpx;
  color: gray;
}

1.searchPut :margin-left :距离左边, 那距离右边同理margin-right
讲下border:border: 2rpx ridge black; 代表边框宽2rpx,样式ridge,颜色黑色
2..table: width: 100vw;代表铺满宽,即100%
3..listitem: display:flex;采用flex弹性布局,flex-direction: row; 即竖向布局,即我们熟悉的tableview样式,同理flex-direction: column; 横向布局。padding:20rpx;即向里周边都缩进20rpx
4..bottomView : justify-content:space-between;justify-content 用于设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式。
| flex-start | 默认值。项目位于容器的开头。 | 测试 » |
| flex-end | 项目位于容器的结尾。 | 测试 » |
| center | 项目位于容器的中心。 | 测试 » |
| space-between | 项目位于各行之间留有空白的容器内。 | 测试 » |
| space-around | 项目位于各行之前、之间、之后都留有空白的容器内。 | 测试 » |
| initial | 设置该属性为它的默认值。请参阅 initial。 | 测试 » |
| inherit | 从父元素继承该属性。请参阅 inherit。 |
5.其他诸如:color,font-size这些不多做解释。

下面来到了.js文件有了这一步,咸鱼变活鱼,界面搭好了,就等渠里通水了。

Page({

  /**
   * 页面的初始数据
   */
  data: {
    searchResults:[],

  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },
  shouldDone: function (event) {
    var searchkey = event.detail.value;
    var that = this;
    wx.request({
      url: 'http://search.ximalaya.com/front/v1?core=all&device=iPhone&is_paid=true&live=true&page=1&paidFilter=false&rows=3&spellchecker=true&version=5.4.45&kw='+searchkey,
      method:"get",
      success: function (res) {
        var results = res.data.album.docs;
        console.log(results);
        for (var i in results) {
          var playtimes = results[i].play;
          var playStr = String(playtimes);
          if (playtimes > 10000)
          {
            playtimes = playtimes/10000;
            playStr = playtimes.toFixed(1)+"万";
          }
          results[i].play = playStr;
        }

        that.setData({
          searchResults: results,
        })
      }
    })
  },

  didSelectCell: function (event) {
    var that = this;
    var index = event.currentTarget.dataset.bindex;
    console.log(index);
    var list = that.data.searchResults;
    var albumID = list[index].id;
    console.log(albumID);
    wx.navigateTo({
      url: 'index?albumId=' + albumID,
    })
  }
})

首先输入搜索的内容后,点击搜索,iOS里应该是有个textfieldshouldReturn,这个事件。那么小程序同理,我们之前已经在wxml里绑定过了,那就是bindconfirm="shouldDone"这行代码,bindconfirm就是这个事件,我们绑定上之后,在js文件里实现这个shouldDone方法,然后再shouldDone方法里进行网络请求去获取数据就好。

说到网络请求,微信小程序的封装那是厉害的一批,
看图

image.png

wx.request就是调网络请求,url是请求的链接,method是请求的方法get,post。
post需要传参的话下面再加个data参数传进去就好。
success就是请求成功的回调,res就是response,更神奇的是,返回数据的解析如图上:var results = res.data.album.docs; 竟然直接点语法就把json给解析了,如图所示的格式


image.png

是不是太方便了。
有了数据了,下面来处理数据,如图


image.png

播放次数,实际服务器返回的“play”这个字段播放次数是64168345,那我们要转为6416.8万,这该怎么转呢,如果是OC代码那我们就得心应手,但这里是小程序。
首先这是一个列表,每条数据里都有play这个字段,两种方案:1.就是要遍历下数组,然后把数组中的这个字段对应的值做下修改。2.直接在对控件赋值的时候做转换(也就是对应iOS里cellforrow里给控件赋值的时候)。那我们现在wxml里已经写好了,直接取的就是play这个字段的值,并没有做转换,如图
suo

所以我们现在采用第一种方法

遍历数组


image.png

那么现在数据就修改完了,要显示了

 that.setData({
          searchResults: results,
        })

这句话就是把我们得到的返回的数据赋值给我们在data里定义的searchResults


image.png

同时,wxml里绑定的searchResults,就会刷新出来界面。


image.png

到此首页搜索界面的实现介绍完毕。下班了,先回家吃饭了,饿死。回来继续

感谢各位看官!

代码地址:https://git.dev.tencent.com/cong_Wang/xcx.git
git clone 即可下载下来代码。
如图:已经下载下来了

image.png

那么怎么跑这个代码呢?我们打开微信开发工具,
image.png

点击+号,即新建项目,导入项目,选择代码的目录,选择测试号,即会为你生成一个测试appid,点击导入按钮。
image.png

大功告成,现在就可以跑项目了
image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容