0

Rails の歴史を持つ RubyMotion を始めたばかりです。2 つのビューを持つシンプルなアプリがあります。最初のビューは、「カテゴリ」の配列をリストする tableView です。各カテゴリには詳細ビューがあります。私は当初、詳細ビューを tableView にも設定しましたが、カテゴリごとに静的テキストの小さな段落しかないため、UILabel に変更しています。詳細に1行のテーブルを使用し、コンテンツでセルの高さを変更することを調べましたが、必要なセルは1つだけなので決定しました...おそらくテーブルの不適切な使用とUILabelのより適切な使用でした(これまでのところ、これは私が言えるように、静的テキスト用です...単なる「ラベル」ではありません)。これに関する意見やアイデアは大歓迎です。

category_view_controller.rb

したがって、私の既存の category_view_controller には、カテゴリ ビュー コントローラーのカテゴリのリストから行が選択されたときに、詳細ビュー コントローラーをプッシュする次のメソッドがあります。現在、app_deligate.rb で静的に属性 (ラベルと説明) を使用してカテゴリを作成しています。これはシムでうまく機能します。

   def tableView(tableView, didSelectRowAtIndexPath:indexPath)

     case indexPath.section
      when 0
       cat, label, desc = Categories.categories_list[indexPath.row]
       detailsVC = DetailViewController.alloc.initWithStyle(UITableViewStyleGrouped,        category:cat, label:label, description:desc)
       navigationController.pushViewController(detailsVC, animated:true)
     end

    tableView.deselectRowAtIndexPath(indexPath, animated:true)
  end

DetailViewController.rb.

このコントローラーは UITableViewController を継承しています。以下のコードはすでに tableView を取り除くように変更されています...これがテーブルがない理由です (UILabel への変更を開始した場所がわかります)。これも、add_deligate ファイルで設定した詳細テキストを含むシンプルな白いラベルで問題なく読み込まれます。

class DetailViewController < UITableViewController

 def initWithStyle(style, category:cat, label:label, description:desc)
   initWithStyle(style)
   @category = cat
   @description = desc
   @label_text = label
   self
 end


 def viewDidLoad
   super
   self.view.backgroundColor = UIColor.redColor

   @label = UILabel.alloc.initWithFrame([[20, 50], [280, 80]]).tap do |label|
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = @description
    label.lineBreakMode = UILineBreakModeTailTruncation
    label.numberOfLines = 0
    label.sizeToFit
    label.textColor = UIColor.colorWithHue(0.0, saturation:0.0, brightness:0.40, alpha:1.0)
    self.view.addSubview(label)
  end
 end  
end

私の混乱

tableView を削除して、UILabel を介して単純な静的テキストを使用する方法がわかりません。あるいは、もっと良い方法があるかもしれません。

details_view_controller を呼び出す category_views_controller のこの行を変更する必要があることはわかっています。この行はまだ UITableViewStyleGrouped を参照しています...スタイルを設定するテーブルがないため、そうすべきではありません。

detailsVC = DetailViewController.alloc.initWithStyle(UITableViewStyleGrouped, category:cat, label:label, description:desc)

「initWithStyle...」を単純に削除しようとしましたが、これによりアプリが壊れます。

detailsVC = DetailViewController.alloc.init(category:cat, label:label, description:desc)

< UITableViewController から継承しないようにするには、details_view_controller も必要です。これは、継承を削除または変更するのと同じくらい簡単に思えます。私は試しました...しかし、これはアプリを壊します。category_view_controller の詳細呼び出しから「UITableViewStyleGrouped」を正しく削除すると、これらのいずれかが機能する可能性があると思われます。

  class DetailViewController

 class DetailViewController < UIViewController

また、details_view_controller 内の viewDidLoad メソッドで背景色を設定しても効果はありません。理由がわからない。

 self.view.backgroundColor = UIColor.redColor

では、要約します。ルート ビューは静的カテゴリの tableView であり、各カテゴリには詳細ビューがあります。リスト内のカテゴリをタップすると、詳細ビ​​ューが読み込まれます。詳細ビューは、そのカテゴリの詳細な説明を表示する UILabel 要素を含む単純なビューです。

誰かがモーションを学習し、このコードを意図したとおりに機能させる方向に向けてくれることを願っています。ありがとう

4

1 に答える 1

2

背景を読むことがたくさんあるようです。問題ありません - 私たちは皆、ある時点でそこにいました。しかし、あなたが直面している問題は、一般的に Cocoa Touch に慣れていないことが原因のようです。

View Controller を含む公式の Apple ガイドを読むことをお勧めします。

https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

コーディングを開始したい場合は、ProMotion が最適です。

https://github.com/clearsightstudio/ProMotion

ProMotion は、厄介な Objective-C の多くを抽象化し、単純なコマンドで画面を開いたり閉じたりできるようにします。

class AppDelegate < ProMotion::AppDelegateParent
  def on_load
    open ListScreen.new(nav_bar: true)
  end
end

class ListScreen < ProMotion::TableScreen
  def table_data
    [{
      title: "",
      cells: [{
        title: "Cell 1",
        action: :selected_cell,
        arguments: { cell_number: 1 }
      }, {
        title: "Cell 2",
        action: :selected_cell,
        arguments: { cell_number: 2 }
      }]
    }]
  end

  def selected_cell(args={})
    if args[:cell_number] == 1
      open DetailScreen
    elsif args[:cell_number] == 2
      open OtherScreen
    end
  end
end

class DetailScreen < ProMotion::Screen
  title "Detail"

  def will_appear
    # Set up your UILabel and whatnot here
  end
end
于 2013-04-21T06:53:45.430 に答える