按下时使按钮填充 UITableView

Posted

技术标签:

【中文标题】按下时使按钮填充 UITableView【英文标题】:Make buttons populate a UITableView when pressed 【发布时间】:2012-11-05 21:53:48 【问题描述】:

我创建了一个简单的 rss 阅读器,它可以毫无问题地填充 viewdidLoad 上的 tableviewcell。我的问题是,每当我单击按钮时,表格视图都不会改变。我尝试使用内部的按钮修饰重新加载,但仍然没有任何反应。 Xcode 和 ios 编程相当新,所以任何帮助都很棒。

.m 文件

#import "ViewController.h"
#import "KMXMLParser.h"
#import "WebViewController.h"
#import "SportsViewController.h"

@interface ViewController ()
@end

@implementation ViewController

    NSArray *loadData;
    NSURL *thumbnails;


@synthesize parseResults=_parseResults;

- (void)viewDidLoad

    [super viewDidLoad];
    KMXMLParser *parser = [[KMXMLParser alloc]  initWithURL:@"http://www.daytonastate.edu/rss/it.xml" delegate:nil];

    _parseResults = [parser posts];
   [self refreshFeed];
        // Do any additional setup after loading the view, typically from a nib.


-(void) refreshInvoked:(id)sender forState:(UIControlState)state

    [self refreshFeed];


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


-(void)refreshFeed

    KMXMLParser *parser = [[KMXMLParser alloc]  initWithURL:@"http://www.daytonastate.edu/rss/it.xml" delegate:nil];

    _parseResults = [parser posts];


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    // Return the number of sections.
    return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    // Return the number of rows in the section.
    return self.parseResults.count;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"DataCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  reuseIdentifier:CellIdentifier];
    // Configure the cell...
        cell.textLabel.text = (self.parseResults)[indexPath.row][@"title"];

    cell.detailTextLabel.text = (self.parseResults)[indexPath.row][@"summary"];

    [self reloadData];

    return cell;
 
#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    WebViewController *vc = [[WebViewController alloc] init];

    vc.url = [NSURL URLWithString:(self.parseResults)[indexPath.row][@"link"] ];

    [self.navigationController pushViewController:vc animated:YES];

    //Makes sure function clicks to reader feed.

    // Navigation logic may go here. Create and push another view controller.


-(IBAction)pressBtn:(id)sender

    UIButton *button= [UIButton buttonWithType:UIButtonTypeRoundedRect];

    if (button.tag==1)
    
        NSLog(@"Press button 1");
        KMXMLParser *parser = [[KMXMLParser alloc]  initWithURL:@"http://www.daytonastate.edu/rss/cea.xml" delegate:nil];

        _parseResults = [parser posts];

        [self reloadData];
    
    if (button.tag==2)
    
        NSLog(@"Press button 2");
        [self EventsBtn:nil];
    


- (IBAction)NewsBtn:(id)sender

      KMXMLParser *parser = [[KMXMLParser alloc]  initWithURL:@"http://rss.cnn.com/rss/cnn_topstories.rss" delegate:nil];

        _parseResults = [parser posts];
    NSLog(@"reload happened");
   // self.printMessage = [[PrintHello alloc] init]; // EDIT: THIS LINE WAS MISSING NOW IT WORKS
    //[self.printMessage Print];

    NSLog(@"NewsBtn Pressed");


- (IBAction)SportsBtn:(id)sender
    
       KMXMLParser *parser = [[KMXMLParser alloc]  initWithURL:@"http://www.daytonastate.edu/rss/it.xml" delegate:nil];

        _parseResults = [parser posts];
    

- (IBAction)EventsBtn:(id)sender

    KMXMLParser *parser = [[KMXMLParser alloc]  initWithURL:@"http://www.daytonastate.edu/rss/events.xml" delegate:nil];
    _parseResults = [parser posts];
    NSLog(@"eventsBtn Pressed");


- (IBAction)WeatherBtn:(id)sender
    
        KMXMLParser *parser = [[KMXMLParser alloc]  initWithURL:@"http://w1.weather.gov/xml/current_obs/KDAB.rss" delegate:nil];

        _parseResults = [parser posts];
    
@end

【问题讨论】:

在您的 cellForRowAtIndexPath 实现中摆脱 [self reloadData]; - 没有意义。 ...下次,请发布不包含大量空行和不相关内容的代码 - 这次我尝试为您修复一点。 【参考方案1】:

在您的 pressBtn: 方法中,替换此行:

UIButton *button= [UIButton buttonWithType:UIButtonTypeRoundedRect];

与:

UIButton *button = (UIButton *)sender;

这假设在 IB 中您已经将 pressBtn: 方法连接到相应的按钮。当您的 pressBtn: 操作被调用时,您拥有的代码正在创建一个新按钮。由于这个新按钮的 tag 值为 0,因此什么也没发生。我建议的代码实际上利用了用户点击的按钮。

【讨论】:

这会有很大帮助 :D ... +1【参考方案2】:

使用调用者(发送者),这是您对其执行操作的项目。不要创建新按钮,您要检查按钮的标签,以便新按钮不是您工作的项目。

试试你的伴郎,:)。

【讨论】:

以上是关于按下时使按钮填充 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

在 PyQt5 中按下时如何切换按钮文本

如何正确删除Android中按钮周围的填充(或边距?)?

按下时按钮前景色更改

输入类型按钮在按下时会改变颜色?

PyQt5 QPushButton setSyleSheet 按下时不改变按钮颜色

按下时更改按钮文本颜色