ios - 如何通过 UIPopoverController 更改 UILabel

标签 ios objective-c uilabel uipopovercontroller

我有一个简单的代码,其中有两个类: View Controller (这是主要的 rootViewController)和 ProductsViewController (谁是通过 PopoverController 打开的 Controller)。

正在发生的事情如下,在 内 View Controller 类我有一个负责更新 UILabel 的 setter 命令:

IBOutlet UILabel *myLabel;
@property(nonatomic,retain)  NSString *saver;

- (void)viewDidLoad{
    [super viewDidLoad];
    myLabel.text = saver;
}
-(void)setLabel:(NSString*)value{
    saver = value;
    myLabel.text = value;
}

ProductsViewController 我的类有负责激活 setter 方法的代码:
ViewController *detailViewController = [[ViewController alloc] init];
[detailViewController setLabel:@"Changes?"];
[detailViewController release];

我相信问题在于弹出窗口打开的时间,因为我相信 UILabel 不知何故处于非事件状态,因为如果我们把 NSLog(@"Exists -> %@",myLabel);在 setter 方法中,我们得到 (空)

有人可以帮我解决这个问题,以及如何解决这个问题?

谢谢。

编辑

我试图以这种方式使用协议(protocol):

ViewController.h
#import <UIKit/UIKit.h>
#import "ProductsViewController.h"

@interface ViewController : UIViewController <ProductsViewControllerDelegate>{

    IBOutlet UILabel *myLabel;
}

-(IBAction)showPopOver:(id)sender;
- (void)productWasSelected:(NSString *)product;
@end

ViewController.m
- (void)presentProductsViewController:(ProductsViewController *)productsViewController {
    productsViewController.delegate = self;
    //present in popover here...
}

- (void)productWasSelected:(NSString *)product{
    myLabel.text = product;
}

ProductsViewController.h
#import <UIKit/UIKit.h>

@protocol ProductsViewControllerDelegate <NSObject>
- (void)productWasSelected:(NSString *)product;
@end

@interface ProductsViewController : UIViewController
@property (nonatomic, retain) id<ProductsViewControllerDelegate> delegate;
@end

ProductsViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.delegate productWasSelected:@"Selected Product"];
    NSLog(@"Called!");
}

我的 ShowPopover 方法如下:
-(IBAction)showPopOver:(id)sender{

    UIButton *btn =sender;
    ProductsViewController *productsView =[[ProductsViewController alloc] initWithNibName:@"ProductsViewController" bundle:nil];
    popOver =[[UIPopoverController alloc] initWithContentViewController:productsView];
    [popOver presentPopoverFromRect:btn.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

    [productsView release];

}

最佳答案

共享同一个类的两个对象不会使它们成为同一个对象。您可能想在这里使用委托(delegate)。网上有很多教程。这是一个例子......

@protocol ProductsViewControllerDelegate <NSObject>
- (void)productWasSelected:(NSString *)product;
@end

@interface ProductsViewController : UIViewController
@property (nonatomic, weak) id<ProductsViewControllerDelegate> delegate;
@end


@implementation ProductsViewController

- (void)didSelectProduct {
    [self.delegate productWasSelected:@"Selected Product"];
}

@end
@interface MainViewController : UIViewController <ProductsViewControllerDelegate>
@end


@implementation MainViewController

- (IBAction)showPopOver:(id)sender{
    UIButton *btn =sender;
    ProductsViewController *productsView =[[ProductsViewController alloc] initWithNibName:@"ProductsViewController" bundle:nil];
    productsView.delegate = self;
    popOver =[[UIPopoverController alloc] initWithContentViewController:productsView];
    [popOver presentPopoverFromRect:btn.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
}

- (void)productWasSelected:(NSString *)product {
    self.myLabel.text = product;
}

@end

关于ios - 如何通过 UIPopoverController 更改 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23814768/

相关文章:

objective-c - "float_t"是做什么用的?

ios - 动画垂直滚动文本

ios - 像这样在 UILabel 中获得一个看起来正常的 unicode 向下箭头 ⬇

objective-c - 如何根据我们拥有的文本设置 UILabel 的高度

ios - Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析

iphone - 分析时 Instruments.app 崩溃

iphone - AudioQueueGetProperty(queueObject, kAudioQueueProperty_IsRunning, &status, &statusSize) 为状态返回垃圾

ios - 使用 MBTiles 在离线 map 中自动将 RMMarker 调整为用户的当前位置

ios - 您的帐户已经拥有有效的 iOS 分发证书,Enterprise Distribution

ios - 在 CoreData 中使用 NSManagedObject 子类找不到 xcode8 header