SSブログ

Table View(テーブルビュー)を使う(2) [AppleScript辞書はつくれるか?]

Table View(2) -選択した部分を取得する-
前回の続きになります。

ss0.png
今回は、TableViewで選択された部分の情報を取得するお話です。
Table View(1)で説明したプロジェクトをベースにして説明しますので、前回で作ったところまでを用意してください。
ss1.png
あれ?と思ったところがあるかもしれませんが、今回は取得した情報を表示するためのTextFieldを一番下に設置しています。ちょっと隙間をあけて右下のオブジェクトライブラリからドラックして設置してください。

では次にソースを書いていきます。

script AppDelegate

    property parent : class "NSObject"

 

    property arrayController : missing value

    property theData : {}

    property tableView1 : missing value

 

    property textField1 : missing value

 

    on action1_(sender)

        (*ここは後で書きます*)

    end action1_

 

    -- IBOutlets

    property theWindow : missing value

 

    on applicationWillFinishLaunching_(aNotification)

--

    end applicationWillFinishLaunching_

    on applicationShouldTerminateAfterLastWindowClosed_(sender)

        return true

    end applicationShouldTerminateAfterLastWindowClosed_

    on applicationShouldTerminate_(sender)

        -- Insert code here to do any housekeeping before your application quits

        return current application's NSTerminateNow

    end applicationShouldTerminate_

end script


水色の部分は前回と同じです。黄色の部分が今回のTextField用のプロパリティです。
それぞれを上の写真を参考にリンクしてください。(すごい説明が適当)

つぎに、アプリケーション起動直後にデータが表示される部分を入力します。

on applicationWillFinishLaunching_(aNotification)

  tell application "Finder"

    set objList to name of (every item of folder (("/System/Library/Sounds" as POSIX file) as text))

  end tell

  set testData to {}

  repeat with i from 1 to (count of objList)

    set testData to testData & {{data1: i, data2: (item i of objList)}}

  end repeat


  set my theData to testData

 

end applicationWillFinishLaunching_


最初の3行で起動ディスク内のシステムサウンドのフォルダの内容のファイル名をリスト化してます。
(今回はここのファイルをどうかしようというようなことはしません。ただリストが欲しかっただけです)
その後の4行で、{data1:通し番号, data2:ファイル名}というようなレコードの集合リストにしています。(説明が面倒ですね。)
{{data1:通し番号, data2:ファイル名 }, {data1:通し番号, data2:ファイル名 }, ...{data1:通し番号, data2:ファイル名 }}
という感じです。
最後に
set my theData to testData
で、情報をTableviewに反映します。

次にBindings inspectorを変更していきます。
ss2.png
ArrryControllerをDelegateとBind to(バインディング)して、モデルキーパスを前回同様theDataに変更。

ss3.png
一つ目のテーブルコラムをArray controllerとバインディングしてモデルキーパスをdata1に変更(前回と変えてます)
ss4.png
二つ目のテーブルコラムをArray controllerとバインディングしてモデルキーパスをdata2に変更(前回と変えてます)
ここまで入力すれば、ビルド&RUNでリストが表示されるはずです。

では次に、そのリストの選択した部分の情報を取得してみましょう。

on action1_(sender)

  tell ArrayController to set theSelect to selectedObjects()

 

  set ans to "Data1: " &  (data1 of theSelect) & " / Data2: " & (data2 of theSelect)

  textField1's setStringValue_(ans)

 

  tell ArrayController to set theSelect to selectionIndex()

  log theSelect

end action1_


最初の1行目selectedObjects()を使い、選択された行の情報を取得しています。
その内容を2〜3行目で処理してテキストフィールドに表示しています。

最後にピンク色で入力した部分は選択された行のインデックス番号を所得してログで出力します。

ではビルド&RUNしてみましょう。
ss0.png
どこでも良いので選択して、確認ボタンを押してみると、テキストビューに取得した情報が表示されます。
いかがでしょう?



さて、ピンク色の部分の説明をしましょう。
ここではselectionIndex()を使って選択した行の番号を取得してログ出力しています

ss5.png
リストの10番目を選んで確認ボタンを押したはずなのに、ログは”9”を表示しています。
これは、Applescriptの通し番号(Index No)は1から始まるのに対し、Xcode Cocoaでは0から始まるためのズレが生じたためです。これから使用していく方はこの部分をよく理解して作業していってくださいね。

では。今回はここまで。


 

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。