【问题标题】:UISwitch, if/else statement to filter TableViewUISwitch, if/else 语句过滤TableView
【发布时间】:2013-07-06 21:59:43
【问题描述】:

所以我正在为我的应用程序创建一个设置视图 (SettingsViewController),该视图包含 5 个开关。我希望完成以下工作:

如果开关打开,过滤 TableView 以仅显示包含“关节炎”的项目。如果开关关闭,则显示所有项目。

注意:TableView 位于另一个视图(ViewController)上。

现在,即使我已将 ViewController.h 导入到我的 SettingsViewController.m 文件中,它仍告诉我 StrainTableView 身份不明。知道为什么吗?请参阅下面的代码(您可以忽略 PickerView 引用)。

SettingsViewController.h

@interface SettingsViewController : UIViewController {


IBOutlet UISwitch *ArthritisSwitch;
IBOutlet UIView *CancerSwitch;
IBOutlet UISwitch *HIVSwitch;
IBOutlet UISwitch *InsomSwitch;
IBOutlet UISwitch *MigSwitch;
IBOutlet UILabel *mylabel;

       NSArray *arthritisResults;
     NSArray *Strains;
}


-(IBAction)switchtheswitch:(id)sender;

@property (nonatomic, retain) NSArray *arthritisResults;


@end

SettingsViewController.m

#import "SettingsViewController.h"
#import "ViewController.h"



@interface SettingsViewController ()

@end

@implementation SettingsViewController
@synthesize arthritisResults;


-(IBAction)switchtheswitch:(id)sender; {

    if (ArthritisSwitch.on) {


        NSPredicate *ailmentPredicate = [NSPredicate predicateWithFormat:@"title ==[c] 'Arthritis'"];

        arthritisResults = [Strains filteredArrayUsingPredicate:ailmentPredicate];


        // Pass any objects to the view controller here, like...

        [StrainTableView setSearchResults: [arthritisResults copy]];

        NSLog(@"%@", arthritisResults);
    }

    else {

          [Strains count];


    }
}

ViewController.h

#import "PickerViewController.h"


@interface ViewController : UIViewController <PickerViewControllerDelegate, UITableViewDataSource,UITableViewDelegate>
{

    NSArray *searchResults;
    // NSArray *Strains;
    NSMutableData *data;
    NSMutableArray *dataArray;
    NSArray *Strains;


}


@property (nonatomic, strong) NSMutableArray * favoritesArray;
@property (nonatomic, retain) NSArray *searchResults;
@property (strong, nonatomic) IBOutlet UITableView *StrainTableView;


@end

【问题讨论】:

    标签: objective-c uitableview uiview uiswitch


    【解决方案1】:

    仅导入一个类不允许您使用该类的属性。你需要获取一个 ViewController 类的实例(比如我们称之为 vc),然后像这样使用它:

    [vc.StrainTableView setSearchResults: [arthritisResults copy]];
    

    如何创建 ViewController 实例取决于应用的结构。您可能不只是想分配 init 一个,而是要获得对您已有的一个的引用。

    顺便说一句,如果您遵守使用小写字母开始属性和方法(以及类的大写字母)的命名约定,您的代码会更容易阅读和理解。

    【讨论】:

    • 好的,请原谅我的新手回复(大声笑),但是我怎样才能创建 viewcontroller 类的实例(或者更确切地说,在 SettingsViewController 中创建对现有实例的引用)?
    • 创建 viewController 类的实例的方式是导入标题,您已经这样做了。之后,在您的 .h 文件中,您创建一个由视图控制器表示的它们类型的变量,例如 Nameofyourviewcontroller *instanceoftheviewcontroller;
    • @user784044,不,它不会创建视图控制器的实例,它只是创建一个键入到该视图控制器类的属性。
    • @BrittanyL,正如我在回答中所说,这取决于您的应用程序的结构。你是如何在屏幕上获得 SettingsViewController 和 ViewController 的?哪个先出现?你在用故事板吗?导航控制器?你需要提供一些关于你正在做什么的细节。
    • @rdelmar 根据我的理解以及我在应用程序中所做的事情,实例化视图控制器与创建视图控制器的实例变量相同。如果我的评论不清楚,我很抱歉。我并不是要让它听起来好像我在说要生成视图控制器的属性。
    猜你喜欢
    • 2019-04-09
    • 1970-01-01
    • 2013-12-25
    • 2017-02-05
    • 2015-07-06
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多