Ecoute 3.0と同じように、NSSearchFieldを作成したいと思います。検索フィールドの検索アイコンはクリック可能で、クリックすると展開したり折りたたんだりする必要があります。
どうすればこれを達成できますか?ドキュメントを検索しましたが、役立つものは何も見つかりませんでした。アニメータープロキシを使用して拡張を実装できるので、それは明らかです。
もう1つは、背景が拡大/縮小すると、背景がフェードイン/フェードアウトすることです。どうすればこれを達成できますか?
アドバイスやサンプルコードなどをいただければ幸いです。
編集
わかりました、私は最初の部分を自分で見つけました。
- (void) resetSearchButtonCell {
NSButtonCell *c= [[NSButtonCell alloc] init];
[c setButtonType:NSMomentaryChangeButton]; // configure the button
[c setBezelStyle:NSRegularSquareBezelStyle]; // configure the button
[c setBordered:NO];
[c setBezeled:NO];
[c setEditable:NO];
[c setImagePosition:NSImageOnly];
[c setImage:[NSImage imageNamed:@"search"]];
[c setAlternateImage:[NSImage imageNamed:@"search-pushed"]];
[c setTarget:self];
[c setAction:@selector(_search:)];
[self setSearchButtonCell:c];
}
これで、プロパティを作成しました。isCollapsed
これを切り替えます_search:
。そして、setIsCollapsed:
セッターメソッドでは、次のことを行います。
NSRect newRect = self.frame;
if (_isCollapsed) {
newRect.size.width = kCollapsedWidth;
} else {
newRect.size.width = kEXpandedWidth;
}
[[self animator] setFrameSize:newRect.size];
しかし、何らかの理由で、NSSearchFieldがフォーカスを取得または失うと、フレームはInterfaceBuilderで設定された初期サイズにリセットされます。
誰か教えてもらえますか?
編集
私もその問題を解決しました。アニメーションを台無しにしたのは自動レイアウトでした。現在、残っているのはbackground-alphaだけで、これは変更する必要があります。全体を再描画することはできますが、背景とキャンセルボタンのみのアルファを変更できる別の解決策はありますか?