2012-01-04 6 views
1

比較的新しいObjective Cでは、私はサーバークライアントアプリケーションを設計し、サーバー側とクライアント側の両方をコード化しました。私はサーバーにGETを送信した後にJSONオブジェクトを受け取って、必要なものはJSON配列(辞書)を介して表示されるタイトルをアプリケーションのビューのボタンのタイトルとして設定します。私はまた、動的にボタンを作成したい、私はいくつかのボタンをリセットする場合は、変更が私のアプリケーションに再び来なければならないことを意味します。誰でもについて私を助けることができるしてください:UIButton配列を作成し、そのタイトルをJSON辞書の内容で設定する方法は?

  1. UIButtonの配列を作成し、 JSON辞書の内容とそのタイトルを設定する方法は?
  2. ビューにボタンを動的に配置する方法。あなたが望むなら、コード も共有できます..

    ボタン= 1; key = 181abc88e57c37a42769; メッセージ=( {ID = 1; 日付= "2011年12月10日16時00分00秒"; メッセージ= ASDF; ステータス= 1; "USER_ID" = 2;} )。 "wrong_user" = 0;

これは最初のgetのために結果であり、そのfariablesを定義した後、私は下にJSONデータを受け取る:

Response of Result2: (
    { 
    ID = 1; 
    name = Ambulance; 
}, 
    { 
    ID = 2; 
    name = Police; 
}, 
    { 
    ID = 3; 
    name = "Somethings"; 
}, 
    { 
    ID = 4; 
    name = Something Else; 
} 

私は必要なものを私の見解ではいくつかのボタンを作成することですこのJSONデータの名前でタイトルを設定します。私のGETコード全体は以下の通りです。私の変数名はそれほど明確ではないかもしれません。ところで、私はボタン配列のIDの数を数えます。ボタン有効無効のect ..おかげで再び

 //## GET code to here** 
    NSString *str1=[@"?username=" stringByAppendingString:userNameField.text]; 
    NSString *str2=[@"&password=" stringByAppendingString:passwordField.text]; 
    NSString *str3=[str1 stringByAppendingString:str2]; 
    NSString *str4 =[@"http://" stringByAppendingString:serverField.text]; 


    NSURL *url=[NSURL URLWithString:[str4 stringByAppendingString:[@"/ipad/login.php" stringByAppendingString:str3]]]; 
    NSLog(@"%@\n",url); 
    //get the url to jsondata 
    NSData *jSonData=[NSData dataWithContentsOfURL:url]; 

    if (jSonData!=nil) { 
     NSError *error=nil; 
     id result=[NSJSONSerialization JSONObjectWithData:jSonData options: 
        NSJSONReadingMutableContainers error:&error]; 

     if (error==nil) { 


      NSDictionary *mess=[result objectForKey:@"message"]; 
      NSDictionary *messContent=[mess valueForKeyPath:@"message"]; 
      NSDictionary *messDate=[mess valueForKeyPath:@"date"]; 
      NSDictionary *messID=[mess valueForKeyPath:@"ID"]; 




      NSLog(@"%@ *** Message %@ \n Message Content: %@ \n Mesage ID: %@ \n Message Date: %@", result, mess, messContent, messID,messDate); 
      NSString*key1=[ result objectForKey:@"key" ]; 

      NSString *s1=[@"http://" stringByAppendingString:serverField.text]; 
      NSString *s2=[s1 stringByAppendingString:@"/ipad/button.php"]; 

      NSURL *url2=[NSURL URLWithString:[s2 stringByAppendingString:[@"?key=" stringByAppendingString:key1]]]; 
      NSLog(@"\n%@\n",url2); 
      NSData *data2=[NSData dataWithContentsOfURL:url2]; 

      id result2=[NSJSONSerialization JSONObjectWithData:data2 options:NSJSONReadingMutableContainers error:nil]; 

      NSLog(@"\n\n\n******* ************ \n\n *********** ***********\n\nResponse of Result2: %@",result2); 
      NSArray *idd=[result2 valueForKeyPath:@"ID"]; 
      NSString *iddName=[result2 valueForKeyPath:@"name"]; 
      NSLog(@"-- %@ -- %@ -- \n The Count Of Buttons: %d", idd, iddName, [idd count]); 
      id sender; 

      [self performSegueWithIdentifier:@"sg1" sender:sender]; 

     } 
    } 

私はまだ結果を得ることができませんでした。 [view addSubview:button]に問題があり、UIViewController *view;と宣言してそのプロパティを準備しましたが、今度はUIViewContrpllerというプロパティを持つことはできません。誰かが何か考えを与えることができます、私は結果をも探検したが、何かを把握することができませんでした。両方のビューは同じクラスに属し、ユーザーアカウント用のビューとアプリケーションパネル用のビュー(ボタンを配置する場所を意味します)

+0

これはJSONデータ形式を知るのに役立ちます –

答えて

1

ボタンを作成する方法は次のとおりです。

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

// set a handler to do something when the user presses the button 
[button addTarget:self 
      action:@selector(yourTouchDownHandler:) 
forControlEvents:UIControlEventTouchDown]; 

// button title will come from the JSON data 
[button setTitle:@"this is the button title" forState:UIControlStateNormal]; 

// you have to change the following line so that buttons do not overlap 
button.frame = CGRectMake(10.0, 10.0, 100.0, 44.0); 

[view addSubview:button]; // this is what makes your button show up on screen 

これは、配列を作成し、それにボタンを追加する方法です:あなたはJSONデータ形式を指定しない限り、

NSMutableArray* buttons = [NSMutableArray array]; 
[buttons addObject:button]; 

は、より多くのお手伝いをすることはできませんが、これはあなたが始める必要があります。あなたはこのコンテンツでメソッドを作成することができます

編集

self.buttons = [NSMutableArray array]; 

CGFloat yPosition = 10.0f; 
const CGFloat buttonHeight = 44.0f; 
const CGFloat buttonMargin = 4.0f; 

for(NSDictionary* buttonData in result2) { 
    NSString* buttonTitle = [buttonData objectForKey:@"name"]; 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    // set a handler to do something when the user presses the button 
    [button addTarget:self 
       action:@selector(yourTouchDownHandler:) 
    forControlEvents:UIControlEventTouchDown]; 

    NSString* buttonTitle = [buttonData objectForKey:@"name"]; 
    [button setTitle:buttonTitle forState:UIControlStateNormal]; 

    button.frame = CGRectMake(10.0f, yPosition, 100.0f, buttonHeight); 

    [view addSubview:button]; 
    [self.buttons addObject:button]; 

    yPosition+= buttonHeight + buttonMargin; 
} 

一度同じビューコントローラのライフサイクル、 よりも方法の詳細を呼び出すする場合は、次のコードを追加してくださいメソッドの始めに。

// remove old buttons 
for(UIButton* button in self.buttons) { 
    [button removeFromSuperview]; 
} 
+0

ありがとうPortela、しかし私は再びコードを共有しました。また、この答えは十分に明確ですが、ただのことです。 「配列にボタンを追加する」とはどういう意味ですか?少し説明できますか –

+0

私はログインビュー(ページ)と2番目のビュー(メインビュー)を持っています。登録後、アプリはメインビューに移り、ボタンをセコンページに作成します。そして2番目のビューも同じクラスに属しています。私はsegue経由でthamに接続し、 '[self performSegueWithIdentifier:@ "sg1" sender:sender];とコールします。今、私はこのページにどのようにボタンを配置しますか? –

+0

新しいビューにボタンを追加する方法を教えてください。ユーザーアカウントページの後に2番目のビューにボタンを配置したいのですが、idiを使ってsegueでビューを接続しました。しかし今、このコードは私のためには機能しません。これは私が持っているエラーです: '"_OBJC_IVAR _ $ _ UIViewController._view"から参照:'コンパイラは[view addSubView:]のエラーを出さない、私はそれを修正する方法を知らない –

関連する問題