0

我正在开发一个 iPad 应用程序。在某些阶段,我需要使用下拉类型的功能。所以,我同样使用 UIPopoverView。

当 IBAction 在点击特定 UIButton 时触发,我会调整 popoverview 渲染 UITableViewController。

一切正常。当用户点击任何单元格时,我需要在附加的 UIButton 标题中设置相关的单元格值。

在此处输入图像描述

在这里,popover 视图是我单独创建的 UITableViewController 视图。并在选择 Outlet IBAction 时调用它。

CGRect dropdownPosition = CGRectMake(self.btnOutlet.frame.origin.x, self.btnOutlet.frame.origin.y, self.btnOutlet.frame.size.width, self.btnOutlet.frame.size.height);
[pcDropdown presentPopoverFromRect:dropdownPosition inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

谢谢

4

3 回答 3

4

Sangony 的答案几乎是正确的,但是有一些细微的变化,而不是将没有参数的方法注册为观察者,您应该添加它以允许一个参数:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(someAction:)
                                             name:@"ButtonNeedsUpdate"
                                           object:nil];

然后,当您发布通知时(在您的表格视图中 didSelectRow:atIndexPath:),您可以添加一个对象(一个 NSDictionay)作为用户信息:

//...
NSDictionary *userInfoDictionary = @{@"newText":@"some text"};
[[NSNotificationCenter defaultCenter] postNotificationName:@"ButtonNeedsUpdate" 
                                                    object:self 
                                                  userInfo:userInfoDictionary];
//...

然后在观察此通知的类中,您可以使用 someAction 操作方法中的数据,如下所示:

-(void)someAction:(NSNotification)notification{
    NSString *textForTheButton = [[notification userInfo]objectForKey:@"newText"];
    [self.myButton setTitle:textForTheButton 
                   forState:UIControlStateNormal];
    //...
}

你的按钮标题现在应该是“一些文字”。

于 2013-04-30T14:28:23.340 回答
2

尝试使用 NSNotificationCenter。在包含您的按钮的 VC 中放置以下代码:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(someAction)
                                                 name:@"ButtonNeedsUpdate"
                                               object:nil];

-(void)someAction {
// do stuff to your button
}

在任何其他导致按钮被修改的 VC 中,放置此代码以发出通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ButtonNeedsUpdate" object:self];
于 2013-04-30T13:16:03.150 回答
1

使用类似的方法实现委托协议didSelectItemWithTitle:。使控制按钮的视图控制器成为弹出窗口中视图控制器的代表。选择一行时,通知委托,然后可以更新按钮。

// MainController.h
#include "PopupTableController.h"
@interface MainController : UIViewController <PopUpListDelegate>

// PopupTableController.h
@protocol PopUpListDelegate;
@interface PopupTableController : UITableViewController 
...
@property (nonatomic, assign) id <PopUpListDelegate> delegate;
...
@end

@protocol PopUpListDelegate 
-(void)didSelectItem:(NSUInteger)item;
@end

// PopupTableController.m
// in didSelectRowAtIndexPath:
if (self.delegate) {
   [self.delegate didSelectItem:indexPath.row];
}

// MainController.m
// where you push the table view or prepareForSegue
popupTableController.delegate = self;

// and
-(void)didSelectItem:(NSInteger)item {
    // update the button based on item
}
于 2013-04-30T12:19:33.943 回答