0

我有一个视图控制器,上面有 6 个按钮。这些按钮中的每一个都推动一个表格视图控制器,该控制器将根据按钮的值与项目一起传播。假设按钮是“汽车”、“货车”等。当按下表格视图时是否可以记住按钮的值,以便推特搜索可以基于按钮传递的值,即#car?我可以使用 6 个不同的表视图来执行此操作,因为我可以viewDidLoad根据搜索为每个视图分配一个方法,但我宁愿只执行一次并允许表视图自动“填充”按钮上的值。这是我的代码:

- (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;

如果您使用 Storyboard,只需确保将 segue 连接到 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)的自定义属性。将一个新文件添加到您的项目中(我将它们放在一个名为 Custom Subclasses 的组中)。该文件应属于 UIButton 类。将其命名为 TweetButton。

然后用这个替换你在 TweetButton.h 中的内容:

进口

@interface TweetButton : UIButton @property(nonatomic, strong) NSString *buttonName; @结尾

TweetButton.m 应如下所示:

导入“TweetButton.h”

@implementation TweetButton @synthesize buttonName; @结尾

然后只需将每个按钮的父类更改为 TweetButton 而不是 UIButton(这将在 Interface Builder 中完成)。

然后在每个 IBActions 中,将该按钮转换为 TweetButton 类型并访问/设置 name 属性。

在经历了这一切之后,另一个想法是在 ViewController 中添加一个属性(NSString)来调用 segue(带有按钮的那个)并将其设置为您想要的任何内容,然后使用它发送到目的地风险投资。

于 2012-05-07T09:50:25.803 回答