如何通知控制器需要更新

时间:2012-10-25 06:51:54

标签: ios xcode

我正在使用this code“模拟”下拉菜单,因为它在html代码中工作。我在页面上添加了2个下拉菜单。当我在第一个下拉菜单中选择一个项目时,我的控制器需要得到通知,并且需要在此通知中给出所选下拉项目中的选定ID。如果在第一个下拉列表中选择了某个项目,我该如何通知我的控制器?此外,如何使用第一个下拉列表中的选定ID打包通知?

我使用以下代码初始化下拉列表:

ddDuration = [[UIDropDownMenu alloc] init];
[ddDuration makeMenu:txtDurationId titleArray:arrDurationIds valueArray: arrDurationNames targetView:self.view];
[ddDuration setDropdownTextColor:[UIColor whiteColor]];
[ddDuration setDropdownBackgroundColor:[UIColor darkGrayColor]];

arrDurationsIdarrDurationNames包含相同数量的元素。第一个包含id,后者包含名称。

然后,我想在dropdown 1中选择一个项目时调用下面的方法。发件人需要包含dropdown 1中所选的商品ID,以便dropdown 2知道应将哪些内容加载到其中。

- (IBAction)didSelectCountry:(id)sender {
    [ddDestination makeMenu:txtDestinationId titleArray:arrDepartureIds valueArray: arrDepartureNames targetView:self.view];
    [ddDestination setDropdownTextColor:[UIColor whiteColor]];
    [ddDestination setDropdownBackgroundColor:[UIColor darkGrayColor]];
}

1 个答案:

答案 0 :(得分:0)

您可以在下载代码的同一页面中找到解决方案。检查一下

[menu1 addObserver:self forKeyPath:@"selectedValue" options:NSKeyValueObservingOptionNew context:@"menu1"];

和这个

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change (NSDictionary *)change context:(NSString *)context
{
    // get the selected menu and value
    NSString* changedObject = context;
    NSString* changedValue = [change objectForKey:NSKeyValueChangeNewKey];

    NSLog(@"%@ has changed to %@", changedObject, changedValue);

    // Menu 1 selected
    if ([context isEqualToString:@"menu1"]){
        // create a new array for menu 2.  
        NSArray *arrayNames2 = [[NSArray alloc] initWithObjects:
                        @"Erik Vanderwal",
                        @"Max Town",  
                        @"Avis Villalon",
                        @"Hugh Salvia",
                        nil];

        // rebuild menu 2 with the new array values
        [menu2 makeMenu:textfield2 titleArray:arrayNames2 valueArray: arrayNames2 targetView:self.view];

        // run makemenu with nil array values to clear the old values from menu 3
        [menu3 makeMenu:textfield3 titleArray:nil valueArray: nil targetView:self.view];

    }

    // Menu 2 selected
    if ([context isEqualToString:@"menu2"]){
        NSArray *arrayNames3 = [[NSArray alloc] initWithObjects:
                            @"Erik Vanderwal",
                            @"Hugh Salvia",
                            nil];

        [menu3 makeMenu:textfield3 titleArray:arrayNames3 valueArray: arrayNames3 targetView:self.view];

    }


}