我有一个带有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;
}
答案 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中的内容:
@interface TweetButton:UIButton @property(非原子,强)NSString * buttonName; @end
TweetButton.m应如下所示:
@implementation TweetButton @synthesize buttonName; @end
然后只需将每个按钮的父类更改为TweetButton而不是UIButton(这将在Interface Builder中完成)。
然后在每个IBActions中,将该按钮强制转换为TweetButton类型并访问/设置name属性。
完成所有这些之后,另一个想法就是在ViewController中添加一个属性(NSString)来调用segue(带按钮的那个)并将其设置为你想要的任何东西然后用它来发送到目的地VC。