0

6つのボタンが付いたView Controllerがあります。これらの各ボタンは、ボタンの値に応じてアイテムと共に伝播される単一のテーブル ビュー コントローラーをプッシュします。ボタンが「車」、「バン」などだったとしましょう。表ビューが押されたときにボタンの値を記憶して、ボタン、つまり #car によって渡された値に基づいて Twitter 検索を行うことは可能ですか? viewDidLoad検索に基づいてそれぞれにメソッドを割り当てることができるので、6 つの異なるテーブル ビューでこれを行うことができますが、一度だけ実行して、テーブル ビューがボタンの値を自動的に「入力」できるようにしたいと考えています。これが私のコードです:

- (void)fetchTweets
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData* data = [NSData dataWithContentsOfURL:
                        [NSURL URLWithString: @"https://api.twitter.com/1/statuses/public_timeline.json"]];

        NSError* error;

        tweets = [NSJSONSerialization JSONObjectWithData:data
                                                 options:kNilOptions
                                                   error:&error];

        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
    });
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return tweets.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TweetCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
    NSString *text = [tweet objectForKey:@"text"];
    NSString *name = [[tweet objectForKey:@"user"] objectForKey:@"name"];

    cell.textLabel.text = text;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];

    return cell;
}
4

1 に答える 1

1

簡単な男。その値を保持するようにその TableViewController のパブリック プロパティを設定します。

TVC .h ファイル内:

@property(nonatomic,strong) NSString *selectedButtonText;

TVC .m ファイルで合成します。

@synthesize selectedButtonText;

ストーリーボードを使用している場合は、セグエがボタンではなく ViewController 自体に接続されていることを確認してから、各ボタンで IBActions を次のように実行します。

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

prepareForSegueMethod(まだ実装していない場合は実装します。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"mySegueID"]) {
        // Cast the sender as a UIButton to get the text
        UIButton *tappedButton = (UIButton *)sender

        MyTableViewController *mtvc = segue.destinationViewController;
        mtvc.selectedButtonText = tappedButton.titleLabel.text;
    }
}

次に、TableViewController でその値を使用してやりたいことを行います

* 編集 *

オブジェクトのカスタム属性用 (UIButton など)。プロジェクトに新しいファイルを追加します (カスタム サブクラスと呼ばれるグループに入れます)。このファイルは UIButton クラスである必要があります。TweetButton という名前を付けます。

次に、TweetButton.h の内容を次のように置き換えます。

輸入

@interface TweetButton : UIButton @property(nonatomic, strong) NSString *buttonName; @終わり

TweetButton.m は次のようになります。

「TweetButton.h」をインポート

@implementation TweetButton @synthesize ボタン名; @終わり

次に、これらの各ボタンの親クラスを UIButton ではなく TweetButton に変更します (これは Interface Builder で行われます)。

次に、各 IBActions で、そのボタンを TweetButton のタイプにキャストし、name プロパティにアクセス/設定します。

これをすべて行った後、セグエ(ボタンのあるもの)を呼び出しているViewControllerにプロパティ(NSString)を追加し、それを必要なものに設定してから、それを使用して宛先に送信するという別のアイデアがありますVC。

于 2012-05-07T09:50:25.803 に答える