目標

  • 生成第一個 redpotion 專案
  • 拉 API 繪成第一個主畫面

步驟:

Step 1: 新增第一個 Project

  • potion new ios-job-list
  • rake

會顯示第一個畫面 Hello World 畫面。

iOS guide 01 - 图1

Step 2 : 修改標題

  • 打開 app/screens/home_screen.rb 修改 title 為 ‘職缺列表’
  • rake

iOS guide 01 - 图2

Step 3 : 準備 jobs 資料

iOS guide 01 - 图3

Step 4 : 接 api

修改 app/screens/home_screen.rb 變成

  1. class HomeScreen < PM::TableScreen
  2. title '職缺一覽'
  3. stylesheet HomeScreenStylesheet
  4. def on_load
  5. @jobs = []
  6. load_jobs
  7. end
  8. def load_jobs
  9. Job.all do |response, jobs|
  10. if response.success?
  11. @jobs = jobs
  12. stop_refreshing
  13. update_table_data
  14. else
  15. app.alert 'Sorry, there was an error fetching the jobs.'
  16. mp response.error.localizedDescription
  17. end
  18. end
  19. end
  20. def table_data
  21. [{
  22. cells: @jobs.map do |job|
  23. {
  24. height: 100,
  25. title: job.title,
  26. action: :view_job,
  27. arguments: { job: job }
  28. }
  29. end
  30. }]
  31. end
  32. def will_animate_rotate(_orientation, _duration)
  33. find.all.reapply_styles
  34. end
  35. end

新增 app/models/api_client.rb

  1. class ApiClient
  2. class << self
  3. def client
  4. @client ||= AFMotion::SessionClient.build('http://localhost:3000/') do
  5. header 'Accept', 'application/json'
  6. response_serializer :json
  7. end
  8. end
  9. def update_authorization_header(header)
  10. client.headers['Authorization'] = header
  11. end
  12. end
  13. end

新增 app/models/job.rb

  1. class Job
  2. attr_accessor :id, :title
  3. def initialize(data)
  4. @id = data['id']
  5. @title = data['title']
  6. end
  7. def self.all(&callback)
  8. ApiClient.client.get 'jobs' do |response|
  9. models = []
  10. models = response.object.map { |data| new(data) } if response.success?
  11. callback.call(response, models)
  12. end
  13. end
  14. end

記得要去 Rakefile 裡面加入這一行

  1. app.info_plist['NSAppTransportSecurity'] = { 'NSAllowsArbitraryLoads' => true } # allow any HTTP request

這樣 app 的網路才會通。

然後執行

  • rake

這樣你就收到剛剛的資料了。

iOS guide 01 - 图4

新增職缺敘述

我們想在列表上新增職缺敘述

iOS guide 01 - 图5

修改 app/models/job.rb

  1. class Job
  2. attr_accessor :id, :title, :content
  3. def initialize(data)
  4. @id = data['id']
  5. @title = data['title']
  6. @content = data['content']
  7. end

修改 app/screens/home_screen.rb 中的 table_data,加入 subtitle

  1. def table_data
  2. [{
  3. cells: @jobs.map do |job|
  4. {
  5. height: 100,
  6. title: job.title,
  7. subtitle: job.content,
  8. action: :view_job,
  9. arguments: { job: job }
  10. }
  11. end
  12. }]
  13. end

資源: