如何从另一个类访问xib中的UIPicker?

时间:2012-08-23 14:35:40

标签: objective-c ios cocoa interface-builder

我在XIB中有一个UIPickerView,我有修改此视图中其他元素的事件:

- (void) pickerView: (UIPickerView *) pickerView didSelectRow: (NSInteger) row inComponent: (NSInteger) component {
    [self.definitionBeep play];
   self.glossaryTerm.text = [[self.dataSource objectAtIndex:row]objectAtIndex:0];
   self.glossaryDefinition.text = [[self.dataSource objectAtIndex:row]objectAtIndex:1];
}

然后我有另一个View,不用IB构建,以编程方式构建,可以从我的ViewController.m访问,如下所示:

- (IBAction)someTouchElement:(id)sender{

    if(myWebScroller == nil) {
        myWebScroller = [[MyWebScroller alloc]
                               initWithFrame: CGRectMake(15, mainControl.frame.origin.y, mainControl.frame.size.width, mainControl.frame.size.height)
                               title:@"     MY TITLE"
                               category:myCat];
        [self.view addSubview: myWebScroller];
    }
}

MyWebScroller内,我正在收听点击次数,并且能够成功地对其进行搜索。我想要做的是更改UIPickerView的值,并让它更改glossaryTerms的值,如上所示。

如果您需要更多说明,请发表评论,我会相应更新问题。感谢

1 个答案:

答案 0 :(得分:2)

扩展伦纳德要求你做的事情......

要收听通知,您需要为其注册观察者。所以你可以在ViewDidLoad:或Viewcontroller.m的ViewWillAppear中执行此操作

  

[[NSNotificationCenter defaultCenter] addObserver:self   selector:@selector(NotificationPosted :) name:@“ClickedInWebView”   对象:无];

然后在Viewcontroller.m中。实施方法“通知已发布

  

- (void)NotificationPosted:(NSNotification *)通知{

     
NSLog(@"Something happened");
//change the picker here.
 }
  

在此之后,在webView.m中,只要您想在选择器视图中更改值,就可以发布通知。

  

[[NSNotificationCenter defaultCenter]   postNotificationName:@“ClickedInWebView”对象:nil userInfo:nil]

或者,您也可以通过NSDictionary传递NSString或NSNumber。

  

NSDictionary * userInfo = [NSDictionary   dictionaryWithObjectsAndKeys:value,@“keyName”,nil];   [[NSNotificationCenter defaultCenter]   postNotificationName:@“ClickedInWebView”对象:nil   USERINFO:USERINFO];

然后,您可以在该实现方法的viewcontroller中使用此字典。使用notification.userinfo