0

这可能是一个简单的问题,但我无法弄清楚我错过了什么。

在 ViewControl.h 我声明了 UIColor

@property (nonatomic, strong) UIColor * myColor;

在 ViewControl.m 我有一个方法可以做一些事情并返回新的 UIColor

@synthesize myColor = _myColor;

在 ViewDidLoad 方法中

- (void)viewDidLoad
{
    myColor = [UIColor RedColor];
}

-(void) ShowColorPopUpView
{
    if (!self.wePopoverController)
    {

        ColorViewController *contentViewController = [[ColorViewController alloc] init];
        contentViewController.delegate = self;
        self.wePopoverController = [[WEPopoverController alloc] initWithContentViewController:contentViewController];
        self.wePopoverController.delegate = self;
        self.wePopoverController.passthroughViews = [NSArray arrayWithObject:self.navigationController.navigationBar];

        [self.wePopoverController presentPopoverFromRect:self.tvTweetDetails.frame
                                                  inView:self.view
                                permittedArrowDirections:(UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown)
                                                animated:YES];

    } else
    {
        [self.wePopoverController dismissPopoverAnimated:YES];
        self.wePopoverController = nil;
    }
}

-(void) colorPopoverControllerDidSelectColor:(NSString *)hexColor
{
    _myColor = [GzColors colorFromHex:hexColor];
    [self.view setNeedsDisplay];
    [self.wePopoverController dismissPopoverAnimated:YES];
    self.wePopoverController = nil;
}
- (UIColor *) returnColor
{
    return _myColor;
}

我的问题从这里开始:我有两种方法可以更改 textview 字体和背景颜色

- (IBAction)btnFontColorPopUpMenu:(id)sender
{
    [self ShowColorPopUpView];
    tvTweetDetails.textColor = [self returnColor];
}
- (IBAction)btnTextViewBackGroundColor:(id)sender
{
    [self ShowColorPopUpView];
    tvTweetDetails.backgroundColor = [self returnColor];
}

现在的问题是,当我调用它返回的方法时,它会返回 RED,如果我再次调用它,它会返回 BlackColor。

如何调用该方法并将颜色更改为新颜色,然后返回。我想直接获得黑色。

我想先执行该方法,然后返回颜色,但发生的是在执行该方法之前分配颜色。

我希望我把问题说清楚了。

4

1 回答 1

1

好的,我会解决这个问题。

我怀疑您在换色器方法中正在执行某种presentViewController:... 方法。这很好,但它有影响。您调用的方法在该演示文稿期间继续执行。这意味着它可能会返回等。

这就是委托概念的用武之地。您可能会从这里稍微重构数据流中受益。

我的建议(如果我对颜色选择器 UI 的呈现是正确的)是您进行以下更改:

  1. @protocol ColorPickerDelegate用一种方法创建一个:-(void) userChoseColor:(UIColor *) color
  2. 添加@property (weak) id<ColorPickerDelegate> delegate到您的颜色选择器视图控制器
  3. 让你的VC在这里实现那个协议
  4. 在委托方法中,设置您的本地属性
  5. 为本地属性实现自定义设置器,并在颜色更改时更新背景颜色。
于 2013-04-10T17:03:32.917 回答