33

私は iPad アプリケーションに取り組んでおり、UIPopoverControllers を使用しています。私は、アプリをブランド化してスタイルを設定する必要がある部分にいます.UIPopoverControllerの色/色合いを変更する方法を知りたいですか? 標準は紺色ですが、別の色が必要です..

これは可能ですか?

よろしく、トーマス

4

10 に答える 10

52

これは、抽象クラスをサブクラス化し、サブクラスをインスタンスのプロパティに割り当てることにより、 iOS 5.0 以降可能になります。残念ながら、動的なサイズ変更中にスムーズなアニメーションを実現するために、ポップオーバーは矢印と境界線に画像を使用する必要があるため、プロパティはありません。UIPopoverBackgroundView Class Referenceで UIPopoverController の外観をカスタマイズする方法について詳しく知ることができます。UIPopoverBackgroundViewpopoverBackgroundViewClassUIPopoverControllertintColor

于 2011-12-16T10:23:56.253 に答える
21

今のところ不可能です。

それは私が「ボックス内のボックス」モデルと呼んでいるものです。UIViewControllerボックスの内側(の内側)でボックスをUIPopoverController制御できますが、実際のポップオーバー自体の制御は非常に制限されています。矢印の方向とサイズ以外は、あまり変更できません。モーダルエフェクトポップオーバーのオプションもあります。これは、表示されたときに他のすべてを暗くしますが、私はそれを機能させようとはしていません。

UIPopover今では授業がないことに気づいたと思います。

あなたが聞きたい答え:
あなたが本当に悪いものをスタイリングしたいのなら、あなた自身のものを書いてください。それほど難しいことではありません。

クリックしたいリンク:
CocoacontrolsはGitHubで利用可能なiOSおよびOSXコンポーネントのインデックスであり、ポップオーバーのものがいくつかあります。

于 2010-03-31T20:07:56.157 に答える
13

iOS 7 では、ナビゲーションの背景色とポップオーバーの矢印に影響を与える/含むbackgroundColorプロパティが導入されています。UIPopoverController

@property (nonatomic, copy) UIColor *backgroundColor NS_AVAILABLE_IOS(7_0);

使用例:

    if ([self.popoverVC respondsToSelector:@selector(setBackgroundColor:)]) {   // Check to avoid app crash prior to iOS 7
        self.popoverVC.backgroundColor = [UIColor greenColor];   // [UIColor colorWithPatternImage:@"..."] doesn't reflect the color on simulator but on device it works!
    }

- 現在 (iOS 7.0.3) では、場合によっては (colorWithPatternImage を使用して色を設定するなど)、シミュレーター (および一部のデバイスでさえ) は色を尊重しません。

于 2013-11-15T21:52:29.353 に答える
8

ここに私の帽子を投げます。

UIPopoverBackgroundViewiOS 5以降でsを利用して、 sに単純なtintColorプロパティを追加しましたUIPopoverController

PCPopoverControllerhttps ://github.com/pcperini/PCPopoverController

于 2012-05-25T23:22:32.550 に答える
0

ポップオーバー内のViewControllerをカスタマイズし、次のコードを使用してポップオーバーの境界線を非表示にすることで、それをだまそうとします。

UIView * border = [[insideViewController.view.superview.superview.superview subviews] objectAtIndex:0];  
border.hidden = YES;

アプリは実際にはまだ開発中なので、他の人がこのソリューションについてコメントしてくれることを期待しています。

于 2011-08-15T09:04:41.020 に答える
0

UIPopoverBackgroundView を活用したこれらの最新プロジェクトをチェックして ください https://github.com/CRedit360/C360PopoverBackgroundView https://github.com/GiK/GIKPopoverBackgroundView

于 2013-07-10T11:07:31.450 に答える
0

ios 5以降からできます、ここにライブラリがあります

https://github.com/ddebin/DDPopoverBackgroundView

ドキュメントを見るだけで、とても簡単です

幸運を

于 2013-08-29T10:27:06.930 に答える
-1

私はこれがお粗末な構築された答えであることを知っています、しかし私はちょうどUIPopoverControllerの見解で遊んでいます。それらは存在します。

それらにアクセスする唯一の方法は、UIPopovercontrollerに座っているビューからです。

私はナビゲーションコントローラーを持っているので、この階層に従います

UIView *test = ((UIView *)[[[self.navigationController.view.superview.superview.subviews objectAtIndex:0] subviews] objectAtIndex:1]);
UIView *test2 = ((UIView *)[[[self.navigationController.view.superview.superview.subviews objectAtIndex:0] subviews] objectAtIndex:1]);
test.backgroundColor = [UIColor greenColor];
test2.backgroundColor = [UIColor greenColor];

これは正確には最終目標ではありませんが、本当に近いです。

the_view_in_the_popover.superview.superview(ナビゲーションコントローラービューから手を差し伸べていない場合は、たぶん1つのスーパービューだけ)がUIPopoverViewであることがわかります。UIViewとしてキャストし、UIViewとして扱う場合、実際にはルールに違反していません。でもそれは本当にアップル次第だと思います。

于 2010-12-17T15:37:55.273 に答える
-3

UIPopoverController の境界線を削除します。

 NSArray* subviews = ((UIView*)[popupController.contentViewController.view.superview.superview.superview.subviews objectAtIndex:0]).subviews;
for(UIView *subview in subviews){
    [subview removeFromSuperview];
}
于 2012-01-18T11:19:58.807 に答える