2010-12-05 6 views
5

iPhoneアプリのUIActionSheetに2つ以上の赤い「破壊ボタン」を表示する方法はありますか?複数の赤色/破壊ボタンUIActionSheet

同じアクションシート内で、すべてを削除する場所と削除の少ない場所を別々にする必要があるため、両方とも赤でなければなりません。

+2

むしろUIActionSheetを変更しようとするよりも、私はここにあなたのインターフェイスのデザインを再考したいです。リスト内に複数の破壊的なオプションがあると、混乱し、プラットフォームの標準に反します。おそらく、あなたのクリアリングアクションを簡単に元に戻すことができ、非破壊にすることができます。 –

+0

クリア履歴ボタンなので、元に戻すことはできません。私は2つのオプションを1つのアクションシートにして非破壊的にすることができたと思います。そして、1つの破壊的なボタンで別のアクションシートで確認を求めてください。しかし、それはユーザーが電話自体を再設定しているようではありません。 –

答えて

2

が、私はちょうどUIActionSheetのための簡単なカスタマイズ可能な代替を作成しました:あなたはここで答えてください助けることができるかどうか

私は、上記のコメントアウトされたラインとのトラブルの少しを持っています場合。標準の外観は使用しませんが、これは変更できます。おそらく、それはあなたのためのものです。

https://github.com/4marcus/WMActionSheet

2

この質問のポスターは、あなたが欲しいものを管理していたようです...私はあなたを正しく理解しています。

Is using subviews in Alert undocumented

EDIT:

私はUIActionSheetのための最初の時間を検索誓います。本当に。 http://www.nearinfinity.com/blogs/andrew_homeyer/display_a_custom_uiview_like_a.html

+1

私はUIAlertViewではなくUIActionSheetを探していますが、とにかくリンクに感謝しています。申し訳ありませんが –

+0

更新された回答。 – griotspeak

1

標準のUIActionSheetでこれを行う方法はありません。あなたはここのもののような勾配のボタンを使用して、独自の「アクションシート」の交換を構築することができ:

http://iphonedevelopment.blogspot.com/2010/05/gradient-buttons-yet-again.html

私は誰かが、よりカスタマイズそっくりのアクションシートの交換を作成しているために、私は1知らない期待私の頭の上から離れる。

0

私はgriotspeak更新の答えを見た前に、私はこれを試してみました:それはあなたが何を私を得れば、それは本当に、一種の、文書化されていないものを使用していない意味するので

SEL getTitle = NSSelectorFromString(@"title"); 
SEL getBackground = NSSelectorFromString(@"background"); 
SEL setBackground = NSSelectorFromString(@"setBackgroundImage:"); 
SEL setTitleColor = NSSelectorFromString(@"setTitleColor:"); 
UIImage *redImage; 
UIColor *titleColor; 
UIColor *shadowColor; 
for (NSObject *object in [action subviews]) { 
    if ([[NSString stringWithFormat:@"%@", [object class]] isEqualToString:@"UIThreePartButton"]) { 
     if ([[object performSelector:getTitle] isEqualToString:@"Clear all"]) { 
      redImage = [object performSelector:getBackground]; 
      titleColor = [object performSelector:@selector(titleColor)]; 
      shadowColor = [object performSelector:@selector(shadowColorForState:) withObject:0]; 
      shadowOffset = [object performSelector:@selector(shadowOffset)]; 
     } 
     if ([[object performSelector:getTitle] isEqualToString:@"Clear all except this month"]) { 
      [object performSelector:setBackground withObject:redImage]; 
      [object performSelector:setTitleColor withObject:titleColor]; 
      [object performSelector:@selector(setShadowColor:) withObject:shadowColor]; 
      //[object performSelector:@selector(setShadowOffset:) withObject:CGSizeMake(-2.5,0)]; 
     } 
    } 

} 

を(私はNSSelectorFromStringではなく、@selector()を使用します。平均)

これは完全には文書化されていませんが、文書化されていない方法を使用したとは思われません。 基本的には、破壊的な背景から赤い背景を取り、それを「キャンセル」という名前の他のボタンに適用することです。

Appleが破壊ボタンの色を変更すると、更新を必要とせずに非破壊的な破壊も同様に変わります。特にAppleにとって安全な方法は使用しませんが。 iPhoneは、同様に使用するためにperformSelector:withObject:, but not with an object

+3

いいえ、しないでください。あなたは未だ文書化されていない方法を使用して、アップルがあなたに修正させないビューの内部構造を取り巻いています。Appleがレビュープロセス中にこれをキャッチしなくても、将来のOS更新中にこのアプリケーションを中断させることになります。 –

+0

論理的には、Appleがそれを更新すると、2番目の破壊ボタンも自動的に更新されるため、これはより優れています。現在の色とリンゴに基づいて自分のアクションシートを作成すると、ボタンのどちらも正しく表示されません。 –

+0

その点は、アクションシートの構造をスタイルと同じように簡単に変更してから改ざんする可能性があることです。これはBradが主張しているワイルドカード要素です。しかし、それが今働くなら、リンゴはそれを承認します、そして、それを壊す更新の可能性を気にしない、それは多くの問題ではありません。 – griotspeak