ページ 1 / 1
objective-cでの条件分岐
Posted: 2013年11月13日(水) 17:11
by kosei
アプリの情報をsqliteを通してlitaから引っ張って来ています。
アプリ上にlabelでlitaに入っている名前を表示しているのですが、
litaに名前のデータが入っていない場合は、labelを表示せずに、下に表示しているものを上に詰める、という指示を書きたいと思っております。
この場合、私は単純に下記のように書けばいいのだと思っていたのですが、上手くいきませんでした。
コード:
if(name = nil)
{
//下に配置されているagelabelを上につめる
UILabel *agelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}
}else{
//名前データがある場合の表示位置
UILabel *namelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}
どのように書けばちゃんと動くのでしょうか?
どうか教えて頂けると幸いです。
Re: objective-cでの条件分岐
Posted: 2013年11月13日(水) 21:41
by みけCAT
Objective-Cはよく知らないのですが、比較して同じ値なら真を返す演算子は=ではなく==なのではないですか?
Re: objective-cでの条件分岐
Posted: 2013年11月13日(水) 23:20
by kosei
本当ですね!
ただ、こちらを直してみたのですが、データが入っていてもいなくても何も変わりませんでした。
再度教えて頂けるとうれしいです。
こちらがしてきて頂いて新しく書いたものです。
コード:
if(name == nil)
{
//下に配置されているagelabelを上につめる
UILabel *agelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}else{
//名前データがある場合の表示位置
UILabel *namelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}
Re: objective-cでの条件分岐
Posted: 2013年11月15日(金) 01:57
by しひ
こんばんは。
何がどう上手くいかないのかよくわからないので、もう少し具体的に教えて頂けませんか?
Re: objective-cでの条件分岐
Posted: 2013年11月15日(金) 12:41
by kosei
情報不足で申し訳ございません。
例えば、現在namelabelが画面に表示(CGRectMake(20,350,100,30))されており、その下にagelabelCGRectMake(20,360,100,30)を表示しております。
ただ、litaにnameデータが入っていない場合に、agelabelをnamelabelの位置(CGRectMake(20,350,100,30))に表示したいと考えております。
そのため、下記のようなコードを書きました。
コード:
if(name == nil)
{
//下に配置されているagelabelを上につめる
UILabel *agelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}else{
//名前データがある場合の表示位置
UILabel *namelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
UILabel *agelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,360,100,30)];
}
しかし、実際にnameデータが入っていようと、いまいと、namelabelの位置はCGRectMake(20,350,100,30)で、agelabelの位置はCGRectMake(20,360,100,30)で変わりません。
このコードの書き方は間違っていますか?
Re: objective-cでの条件分岐
Posted: 2013年11月16日(土) 02:43
by しひ
そのコードを見る限りnamelabelもagelabelも無駄になっているように思うのですけど
本当に表示されていますか?
Re: objective-cでの条件分岐
Posted: 2013年11月16日(土) 07:42
by kosei
しひさん、ありがとうございます。
はい、namelabelもagelabelも常時表示されてしまいます。
しひさんが言う、無駄になっているというのはどういう意味でしょうか?
Re: objective-cでの条件分岐
Posted: 2013年11月16日(土) 10:36
by みけCAT
kosei さんが書きました:しひさんが言う、無駄になっているというのはどういう意味でしょうか?
おそらく、namelabelやagelabelをローカル変数にしか代入していないので、
(フォーム(?)上のIDで指定するなどの方法が用意されていなければ)条件分岐のあとで参照できない、という意味だと思います。
Re: objective-cでの条件分岐
Posted: 2013年11月16日(土) 23:11
by しひ
すみません、概ねみけCATさんの書かれている通りです。
ええと、セルはどう作成しているのでしょうか。
Interface Builder上でラベルを並べたりしていますか? また、そのセルを持つためのクラスを作成していますか?
Re: objective-cでの条件分岐
Posted: 2013年11月17日(日) 17:33
by kosei
みけCATさん、しひさんありがとうございます。
labelはこのように作っています。
コード:
UILabel *agelabel = [[UILabel alloc] initWithFrame:CGRectMake(0,202,320,28)];
agelabel.text = mission.age;(sqliteのデータを引っ張っています)
phraselabel.font = [UIFont fontWithName:@"HiraKakuProN-W3" size:16];
[self.view addSubview:agelabel];
クラスは作っていません。
labelを作るのには、これを書いただけです。
Re: objective-cでの条件分岐
Posted: 2013年11月17日(日) 22:53
by しひ
ひどい勘違いをしていました。セルとか全然関係ないですね。
ラベルをaddSubviewした後にframeを変更するとどうなりますか?
Re: objective-cでの条件分岐
Posted: 2013年11月19日(火) 00:05
by kosei
frameを変更すると、変更した通りに配置位置が変わったり、labelのサイズ変わります。
Re: objective-cでの条件分岐
Posted: 2013年11月19日(火) 02:03
by しひ
そうですよね。
name == nil を [name length] == 0 とするとどうでしょうか。
Re: objective-cでの条件分岐
Posted: 2013年11月19日(火) 09:45
by kosei
しひさん本当にありがとうございます。
[name length] == 0 とすることでちゃんと動きました。
ただ、なぜ name == nilであると反応がしなかったのでしょうか?
最後にこの点だけご教授頂けると嬉しいです。
Re: objective-cでの条件分岐
Posted: 2013年11月20日(水) 00:45
by しひ
名前のデータが入っていない場合、恐らくnameにはnilではなく@""(長さ0の文字列)が入っているのではないかと思います。
長さ0の文字列は見た目こそデータがないように見えますが、文字列としてはきちんと存在しているのでnilにはなりません。
というのが答えです。
もっとも、これはnameの値を見ないことには正解かどうかわかりませんけどね。
Re: objective-cでの条件分岐
Posted: 2013年11月20日(水) 01:11
by kosei
しひさん
なるほどですね!すごくよくわかりました!
わかりやすい説明ありがとうございます。
みなさんのおかげで解決できました。
ありがとうございます。