2011-01-11 5 views
1

によってそれらを取得中に入れ直すとき、私はiPhoneのSpringboardドラッグを模倣し、タイルゲームのための機能をドロップしようとしており、現在でUIButtonsを生成するMatrixCellsを使用していますUIButtonsを巡回する際、適切に機能しますが、ではありません初期化を表示してビューに追加します。 MatrixCellsには​​orderというタグがあり、それ自体のボタンにも使用されています([button setTag:[cell order]];)。 使用layoutsubviews()タグ

グリッドでそれらを配置するビューのUIButtonsを循環する `layoutSubviews'を使用して、それが正常に動作します。グリッドがポップアップし、私のドラッグ機能により、私が自由にボタンをドラッグすることができます。

- (void)layoutSubviews {

int row = 0; 
int col = 0; 
for (UIButton *button in [self subviews]) { 
    [button setFrame:CGRectMake(col * 80 + 5, row * 80 + 25, 70, 70)]; 

    if (col < 3) { 
     col++; 
    } 
    else { 
     row++; 
     col = 0; 
    } 
} 

}

セルの順序を変更するとき、私は私が全くそこに周りの混乱になっていないよかなり確信しているので、subviewsを巡回して、動作しません。だから、私は私のMatrixCellsを循環したかったし、適切なビューを取得し、その後frameを変更するために彼らのorderを使用しています。しかし、レイアウトはボタン0でうんざりしてしまい、もうボタンとして使うことはできません。ここで

- (void)layoutSubviews {

int row = 0; 
int col = 0; 
for (MatrixCell *cell in currentOrder) { 
    UIView *view = [self viewWithTag:[cell order]]; 
    [view setFrame:CGRectMake(col * 80 + 5, row * 80 + 25, 70, 70)]; 
    if (col < 3) { 
     col++; 
    } 
    else { 
     row++; 
     col = 0; 
    } 
} 

}

結果と絵です:http://i52.tinypic.com/2q903lk.png

viewWithTagは、このための最もエレガントな解決策になると思われました。だから私は迷っている。なぜこれらの実装が同じものを提供しないのか?

答えて

1

[self viewWithTag:0]は、(UIButton *)の代わりにselfを最初に返します。これは、初期化時にビューのtagを変更しなかったためです。デフォルトでは、初期設定時にデフォルトで0にタグ付けされます。 layoutsubviewsは、レイアウトと機能をめちゃくちゃ、selfframeを変更することが進みました。初期化時にビューのタグを999に変更して、このジレンマを解決しました。

2

それはあなたがその灰色のグラデーションの背景を提供する背景UIImageを持っているというように私には見えます。また、0の[cell order]は、私はあなたのために[self viewWithTag]を呼び出すと、あなたは、このように0

にデフォルト設定されますあなたの背景UIImageのタグを変更したことがないことを推測するつもりかもしれないあなたのボタン0のように見えます最初にUIButton(0とラベル付けされています)、タグ0の最初のサブビューが見つかります。背景画像ではなく、UIButtonです。これは、私は疑う。なぜ他のすべてのボタンがうまく整列しているのか、背景が変わった理由、そして0ボタンが表示されない理由です。

+0

完全に正確ではないが、それは右のトラックに私をもたらしました。私はちょうど背景のための 'UIColor'を設定し、ボタンは' setImage'も持っています。しかし、 '[self viewWithTag:0]'は 'self'を返しました。フレームを完全に台無しにしてしまいました。ボタン0を忘れてしまって、他のボタンにアクセスできませんでした。しかし、私はそれを解決したので、ありがとう!プロトコルは今何ですか、私はこの答えを正しいものとしてマークしますか?代わりに私自身の質問に答える必要がありますか? – SpacyRicochet

+0

ああ、私の精神的なデバッグは失敗しました(しかし、ちょうど!)。この場合、おそらく私自身の答えを書いて、それを受け入れるでしょう。しかし、アップヴォートは決してうまくいっていない;) –

+0

ああ、私はまだ投票しても十分な評判がない低学年だ。しかし、それが可能になると、私はそうすることを確認します:) – SpacyRicochet

関連する問題