从 UIPopover 向主 UIViewController 发送代表消息

     2023-03-13     247

关键词:

【中文标题】从 UIPopover 向主 UIViewController 发送代表消息【英文标题】:Send a Delegate message from UIPopover to Main UIViewController 【发布时间】:2012-01-16 18:25:02 【问题描述】:

我试图在我的UIPopover 中使用一个按钮在我的主要UIViewController 中创建一个UITextView,我的代码看起来像这样(PopoverView.h 文件):

@protocol PopoverDelegate <NSObject> 

- (void)buttonAPressed;

@end

@interface PopoverView : UIViewController <UITextViewDelegate>   //<UITextViewDelegate>

    id <PopoverDelegate> delegate;
    BOOL sendDelegateMessages;

@property (nonatomic, retain) id delegate;
@property (nonatomic) BOOL sendDelegateMessages;
@end

然后在我的PopoverView.m 文件中:

- (void)viewDidLoad

    [super viewDidLoad];

UIButton * addTB1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
addTB1.frame = CGRectMake(0, 0, 100, 50);
[addTB1 setTitle:@"Textbox One" forState:UIControlStateNormal];
[self.view addSubview:addTB1];    // Do any additional setup after loading the view from its nib.
[addTB1 addTarget:self action:@selector(buttonAPressed) 
forControlEvents:UIControlEventTouchUpInside];


- (void)buttonAPressed

    NSLog(@"tapped button one");

    if (sendDelegateMessages)
        [delegate buttonAPressed];

还有我的MainViewController.m

- (void)buttonAPressed 

    NSLog(@"Button Pressed");
    UITextView *textfield = [[UITextView alloc] init];
    textfield.frame = CGRectMake(50, 30, 100, 100);
    textfield.backgroundColor = [UIColor blueColor];
    [self.view addSubview:textfield];

我正在使用委托协议来链接 popover 和 ViewController,但我一直坚持如何让我的 BOOL 语句链接 PopoverView 和 MainViewController 中的 -(void)buttonAPressed,这样当我按下按钮时弹出一个文本视图出现在主 VC 中。我该怎么做呢?

【问题讨论】:

【参考方案1】:

在您创建PopoverViewMainViewController 中,请务必设置其delegate 属性,否则在PopoverView 中向delegate 发送消息将无济于事。

例如在MainViewController.m:

PopoverView *pov = [[PopoverView alloc] initWithNibName:nil bundle:nil];
pov.delegate = self;  // <-- must set this
thePopoverController = [[UIPopoverController alloc] initWithContent...

我不确定您为什么需要 sendDelegateMessages 变量。即使使用该布尔值,您也必须设置 delegate 属性,以便 PopoverView 具有将消息发送到的实际对象引用。

如果您想确保delegate 对象已经实现了您将要调用的方法,您可以这样做:

if ([delegate respondsToSelector:@selector(buttonAPressed)])
    [delegate buttonAPressed];

此外,delegate 属性应使用assign(或weak,如果使用ARC)而不是retain 声明(请参阅Why use weak pointer for delegation? 以获得解释):

@property (nonatomic, assign) id<PopoverDelegate> delegate;

另一件事是如果你不使用ARC,你需要在MainViewController中的buttonAPressed方法的末尾添加[textfield release];以避免内存泄漏。

【讨论】:

这绝对是固定的,非常感谢!并感谢您的提示。会阻止我犯更多的错误。

如何从另一个 UIPopover 控制器打开 UIPopover 控制器?

】如何从另一个UIPopover控制器打开UIPopover控制器?【英文标题】:HowtoopenUIPopoverControllerfromanotherUIPopoverController?【发布时间】:2012-06-1908:16:01【问题描述】:如何在iPad中从另一个Popover控制器打开一个Popover控制器?我想对此有所... 查看详情

有啥方法可以从 UITableView 索引中呈现 UIPopover 吗?

】有啥方法可以从UITableView索引中呈现UIPopover吗?【英文标题】:IsthereanywaytopresentanUIPopoverfromanUITableViewindex?有什么方法可以从UITableView索引中呈现UIPopover吗?【发布时间】:2010-07-3012:56:48【问题描述】:我想展示一个来自UITableVi... 查看详情

无法从另一个类中关闭 UIPopover

】无法从另一个类中关闭UIPopover【英文标题】:UnabletodismissaUIPopoverfromanotherclass【发布时间】:2013-06-2915:41:34【问题描述】:我有一个iPad应用,使用XCode4.6.3、iOS6.2、ARC和Storyboards创建。我在SubViewData.m中以编程方式创建了一个UIPop... 查看详情

UIPopover 从错误的按钮出现

】UIPopover从错误的按钮出现【英文标题】:UIPopoverappearingfromwrongbutton【发布时间】:2013-10-1116:28:31【问题描述】:我有一个应用程序,它从现有库中获取图像,或者从相机中获取新图像。在iPad上,当我按下“从库”按钮时,弹... 查看详情

如何从 UISegmentedControl 的选定段呈现 UIPopover

】如何从UISegmentedControl的选定段呈现UIPopover【英文标题】:HowtopresentUIPopoverfromselectedsegmentofUISegmentedControl【发布时间】:2013-09-2608:07:11【问题描述】:我需要从UISegmentedControl的选定片段中显示弹出框,该片段是UIToolBar的子视图。... 查看详情

从 UITableViewCell 中的 DisclosureButton 呈现 UIPopover

】从UITableViewCell中的DisclosureButton呈现UIPopover【英文标题】:PresentingaUIPopoverfromaDisclosureButtoninaUITableViewCell【发布时间】:2011-08-0706:31:28【问题描述】:我正在尝试做一些非常简单的事情,但我不知道如何将弹出框锚定到UITableViewC... 查看详情

启动时如何将数据从 uiviewcontroller 发送到 uipopover?

】启动时如何将数据从uiviewcontroller发送到uipopover?【英文标题】:howtosenddatafromuiviewcontrollertouipopoverwhenitisbeinglaunched?【发布时间】:2013-07-1602:07:31【问题描述】:我在许多视图控制器的uipopover中使用uidatepicker。我需要在每个视... 查看详情

如何从 UIPopover 中的 UIButton 在主 UIView 中创建 UITextView?

】如何从UIPopover中的UIButton在主UIView中创建UITextView?【英文标题】:HowdoicreateaUITextViewinmainUIViewfromaUIButtonWithinUIPopover?【发布时间】:2012-01-1017:30:07【问题描述】:当UIControlEventTouchUpInside发生在UIPopoverController中的UIButton时,我正... 查看详情

当父视图是 UIPopover 时,iPad 上的 UIActionSheet 从底部出现

】当父视图是UIPopover时,iPad上的UIActionSheet从底部出现【英文标题】:UIActionSheetoniPadcomesupfromthebottomwhentheparentviewisaUIPopover【发布时间】:2012-01-1021:48:29【问题描述】:在iPad上,我有一个弹出框视图。视图中有一个显示UIActionSheet... 查看详情

从异步块向主线程发送参数时遇到问题

】从异步块向主线程发送参数时遇到问题【英文标题】:TroubleSendingParametertoMainThreadFromAsyncBlock【发布时间】:2013-01-0305:56:56【问题描述】:我有以下方法在拍摄照片后从UIImagePicker检索ALAsset。然后它尝试通过主线程将此ALAsset发... 查看详情

Xcode 4.3.2 上的 uipopover 冻结问题

】Xcode4.3.2上的uipopover冻结问题【英文标题】:uipopoverfreezeissueonXcode4.3.2【发布时间】:2012-05-0206:59:56【问题描述】:你好,我只是想从一个矩形按钮制作一个简单的uipopover。在以前的Xcode(4.2)中,我可以毫无问题地运行它,但是... 查看详情

从自定义 UIPopOver 问题推送新的 UIViewController

】从自定义UIPopOver问题推送新的UIViewController【英文标题】:PushingnewUIViewControllerfromcustomUIPopOverissue【发布时间】:2015-04-0310:57:37【问题描述】:您好,我正在使用这个library来显示我的PopOver,其中包含带有searchBar的tableView。问题... 查看详情

自定义 UIPopover

】自定义UIPopover【英文标题】:CustomizingUIPopover【发布时间】:2013-08-1417:39:32【问题描述】:我想改变UIPopover的颜色。我创建了一个自定义弹出框,但我不知道为什么不显示边框。这是显示UIPopover的MainViewController文件:@synthesizebt... 查看详情

键盘显示时 uipopover 隐藏

】键盘显示时uipopover隐藏【英文标题】:uipopoverhideswhenkeyboardshows【发布时间】:2012-08-0611:26:55【问题描述】:我有一个带有UItextfield的UIpopover,当我打开popover并点击uitextfield然后键盘显示,但它隐藏了popover。如何在不隐藏UIpopove... 查看详情

UIPopover 内的 UITextField

】UIPopover内的UITextField【英文标题】:UITextFieldinsideUIPopover【发布时间】:2012-04-2018:14:44【问题描述】:我在UIPopover中有一个UITextField。但是,无论我做什么,我都无法输入它。如果我在主视图控制器中使用UITextField可以正常工作... 查看详情

UIPopOver、UITextView 和自动调整大小

】UIPopOver、UITextView和自动调整大小【英文标题】:UIPopOver,UITextViewandautomaticresizing【发布时间】:2012-03-2220:01:56【问题描述】:我有一个应用程序,允许用户将事件添加到列表中。我用来执行此操作的方法是通过我在UIPopOver中向... 查看详情

UIPopover 中的 UIDatePicker

】UIPopover中的UIDatePicker【英文标题】:UIDatePickerinUIPopover【发布时间】:2011-11-1214:22:46【问题描述】:我已经搜索了整个互联网(也许我有点夸大其词),以获取有关如何将DatePicker放入UIPopover并在iPad应用程序中显示的教程。我... 查看详情

UIPopover 防止摇晃撤消

】UIPopover防止摇晃撤消【英文标题】:UIPopoverpreventingshaketoundo【发布时间】:2012-07-0619:46:45【问题描述】:我有一个允许在各种情况下输入文本的应用程序。当文本输入到UIPopover内的UITextView或UITextField时,摇动撤消不起作用。摇... 查看详情