按下按钮单击以在按下表视图时记住值

时间:2012-05-07 09:39:20

标签: iphone ios twitter tableview

我有一个带有6个按钮的视图控制器。这些按钮中的每一个按下一个表视图控制器,该控制器将根据按钮具有的值传播项目。让我们说按钮是'car','van'等。按下表视图时可以记住按钮的值,以便twitter搜索可以基于按钮移交的值,即#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;
}

1 个答案:

答案 0 :(得分: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中的内容:

import

@interface TweetButton:UIButton @property(非原子,强)NSString * buttonName; @end

TweetButton.m应如下所示:

import“TweetButton.h”

@implementation TweetButton @synthesize buttonName; @end

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

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

完成所有这些之后,另一个想法就是在ViewController中添加一个属性(NSString)来调用segue(带按钮的那个)并将其设置为你想要的任何东西然后用它来发送到目的地VC。