まず動かしてみてから考える(2)

2010. 01. 22
前回に引き続き『目指せ!iPhoneアプリ開発エキスパート』を実際にやってみた編です。

『第5回 アクションとObjective-C』までは、読み進めながらついていけると思いますが、第6回と第7回は機能の紹介だけで実作業については記事本文であまり触れられていません。

第6回の最後の方にソースコードを公開している旨が書かれていますので、ソースを解読して試してという話だと思いますが、それまで懇切丁寧な説明だっただけに、突然ハシゴを外されたような感じで挫折してしまいそうです。

ただプログラミングの勉強の場合、サンプルコードの解読は常套手段ですので、それができないと話にならないと言われるとそれまでだったりもします。

とはいえ、端折り過ぎな部分もあるので、ここで独自に穴埋めをしてみたいと思います。

ただし、私も初心者ですので以下の説明が正しいか自信がありませんし、実行した結果、何らかの損害を被っても保証いたしかねますので、ご留意の上読み進めてくださいませ。

ちなみにBargainSaleのプロジェクトは、ターミナルで

svn checkout http://bargainsale.googlecode.com/svn/trunk/ bargainsale

と入力するとダウンロードできます。



第8回 アプリの完成を目指して

●バーゲン教師を作る

前回まで試していたBargainSaleのプロジェクトはいったん終了してフォルダごと捨てて、新規にBargainSaleプロジェクトを起こします。
(Xcodeで『新規プロジェクト』→『View-based Application』→『BargainSale』と入力)

016
 
●背景色の変更

『BargainSaleViewController.xib』を開いてInterFace Builderを立ち上げます。

インスペクタパネル中央の『Background』をクリックするとパレットが出てきますので、これで好きな色に背景を変えます。

017

●パーツの配置

LibraryパネルからViewパネルへのドラッグ&ドロップで、『Text Field』『Label』『Segmented Control』『Slider』『Round Rect Button』を配置していきます。

フォントのサイズを変更したりボールドにするにはFontメニューから、フォントの色はインスペクタパネル『Label』欄の『Color』をクリックしてパレットで変更できます。

割引後の価格や合計額の表示で、Labelを右寄せにするには、インスペクタパネル『Label』欄の『Layout』で変更します。

018

機能や表示に影響しない程度であれば、厳密に合わせなくても大体のレイアウトで構わないと思います。

ただし、Text Field入力時に出てくるNumber Padを閉じるActionは、Segmented ControlとSliderに関連付けしますので、Sliderは画面中央より上に配置する必要があります。

019

パーツ配置後、Text FieldとSliderにインスペクタで値を設定します。

(1)Text Field   Keyboardを『Number Pad』に
(4)Slider     ValueのMinimumを『0.05』、Maximumを『0.95』に

●アウトレットとアクションの作成

Interface Builderのファイルウィンドウの『Files Owner』を選択し、Libraryパネルで『Classes』を選択、すぐ下のリストから『BargainSaleViewController』を選択し、下方の『Outlets』と『Actions』に以下のものを追加します。

アウトレット)
priceOriginal    (1)Text Field
discountButton   (2)Segmented Control
discountPercent   (3)Lavel
discountSlider    (4)Slider
priceNew      (5)Lavel
cartPrice      (7)Lavel

アクション)
buttonValueChanged:   (2)Segmented Control        Value Changed
sliderValueChanged:   (4)Slider               Value Changed
escapeButtonPush:    (2)Segmented Control (4)Slider   Value Changed
pushAddCart:       (6)Round Rect Button        Touch Down
pushClearCart:      (8)Round Rect Button         Touch Down

020

設定が終わったら『File's Owner』選択状態でFileメニューのWrite Class Filesで書き出し、ファイルもセーブしておきます。

●アクションの実装

『pushAddCart』アクションですが『priceNewとcartPriceを足してcartPriceに戻す』部分が抜けています。
公開ソースにはきちんと書かれていたので、修正します。

- (IBAction)pushAddCart:(id)sender {

int org = [[cartPrice text] intValue];

int add = [[priceNew text] intValue];

[cartPrice setText:[NSString stringWithFormat:@"%d", org + add]];

}

また、『pushClearCart』アクションで確認ダイアログを出すので、第7回のデリゲートの設定を参考に、BargainSaleViewController.hの@interfaceから始まる行を修正します。

@interface BargainSaleViewController : UIViewController <UIActionSheetDelegate> {

これでビルドしてもエラーが出ず、一通り動くはずです。


ただ一つ気になったのは・・・

021


Sliderで60%、80%、85%を選択した際の端数処理が上手くできていないんです。
これはダウンロードしたサンプルコードでも同様ですので、今回は仕方ないとします。







QuietControl 30 wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
04 | 2017/05 | 06
Sun Mon Tue Wed Thu Fri Sat
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

QuietControl 30 wireless headphones
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR