2011-12-30 6 views
5

例えば、UIActionSheetではnilで終了した文字列のリストを求めるSDKには多くの方法、ありますとしてゼロで終わるNSStringのリストを構築するNSString *

- (id)initWithTitle:(NSString *)title delegate:(id <UIActionSheetDelegate>)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... 

「otherButtonTitlesは」このケースでは、nilで終わるNSStringのリストです。私がしたいのは、NSStringのNSMutableArrayを使ってこのメソッドを呼び出すことです。なぜなら、引数を動的に作成して並べ替えたいからです。どうすればいい?私はこの場合NSStringsへのnil終端されたポインタを作成する方法がわかりません。手動でメモリを割り当てて解放する必要がありますか?

答えて

9

は、任意の配列を可変リストに変換できません。シートが作成された後

しかし、UIActionSheetのために、あなたは私もダイナミックアクションシートを作成する必要があり-addButtonWithTitle:

UIActionSheet* sheet = [[UIActionSheet alloc] initWithTitle:... 
                 /*etc*/ 
              otherButtonTitles:nil]; 
for (NSString* otherButtonTitle in otherButtonTitlesArray) 
{ 
    [sheet addButtonWithTitle:otherButtonTitle]; 
} 
+4

これは良い解決策ではありません。シートを初期化して、上記のようにループで 'otherButtons'を追加すると、何らかの理由でCancelボタンが上にくることになります。 – Arnold

+0

問題を解決する必要があります。 [sheet setCancelButtonIndex:[シート番号オブジェクトボタン] - 1]; – mtwagner

+0

@mtwagner nopeこれは、ボタンのスタイルを変更するだけで、表示される順序ではありません。 –

5

を使用して、それらのotherButtonTitlesを追加することができます。だから私はほとんど空のアクションシートを作った。私のボタンを追加しました。その後、キャンセルボタンを追加し、キャンセルとしてマークしました。

sheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:homeName, nil];  
[sheet addButtonWithTitle:otherButton1]; 
[sheet addButtonWithTitle:otherButton2]; 
[sheet addButtonWithTitle:@"Cancel"]; 
[sheet setCancelButtonIndex:[sheet numberOfButtons] - 1]; 
sheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent; 
[sheet showInView:self.view]; 
[sheet release]; 
+0

これは受け入れられたものよりも完全な答えです。ありがとう! –

1

あなたは確かたva_listしたNSArrayを変換することができます。例えば、このようNSString

- (id)initWithFormat:(NSString *)format arguments:(va_list)argList 

で使用する:あなたはUIActionSheetにキャンセルボタンを設定している場合

+ (id)stringWithFormat:(NSString *)format array:(NSArray *)arguments; 
{ 
    NSRange range = NSMakeRange(0, [arguments count]); 
    NSMutableData *data = [NSMutableData dataWithLength:sizeof(id) * [arguments count]]; 
    [arguments getObjects:(__unsafe_unretained id *) data.mutableBytes range:range]; 
    return [[NSString alloc] initWithFormat:format arguments:data.mutableBytes]; 
} 
+0

異なるユースケースを指摘して、あなたがそれを実行できると言ってもいいです。しかし、あなたはOPによって与えられたユースケースのためにそれをすることができますか? – Ryan

+0

受け入れられた回答の1行目のコメントですので、コメントは必要ありません – LorikMalorik

関連する問題