【问题标题】:How to set NSString before calling a method objective c如何在调用方法目标 c 之前设置 NSString
【发布时间】:2013-04-11 01:42:19
【问题描述】:

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

在 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。

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

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

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

【问题讨论】:

  • changeMycolor方法中添加myColor = [UIColor RedColor];
  • 你到底想在这里做什么?
  • 它已经添加了......对不起,我想写 myColor 而不是 myString。 @AnoopVaidya
  • @bdesham 好的,这个 changeMyColor 实际上是一个返回颜色的颜色选择器方法。因此,每当我想更改 TextView 背景或文本颜色时,我都会调用此方法。问题是当我调用它时,它会返回之前选择的颜色
  • 我认为您应该展示您如何在该方法中更改颜色

标签: iphone ios objective-c xcode


【解决方案1】:

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

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

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

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

  1. 使用一种方法创建@protocol ColorPickerDelegate-(void) userChoseColor:(UIColor *) color
  2. @property (weak) id<ColorPickerDelegate> delegate 添加到您的颜色选择器视图控制器
  3. 让您的 VC 在此处实现该协议
  4. 在委托方法中,设置本地属性
  5. 为本地属性实现自定义设置器,并每当颜色发生变化时更新背景颜色。

【讨论】:

  • 首先感谢您的解释。正如我所说,颜色选择器工作正常,它返回我选择的颜色并将其分配给 myColor。我的问题是 changeTextViewBackGround 方法首先将 myColor 分配给 TextView 背景颜色然后执行 changeMyColor.. 我想先调用 changeMyColor 然后分配 TextView 颜色@ctrahey
  • @iMubarak:我认为你需要发布更多代码,这样我们才能真正看到你试图描述的控制流。
  • 根据您的更新:使用您的属性self.myColor 设置新颜色,然后实现自定义设置器并更改当时的背景颜色(我的答案中的#5)
  • 我有一个自定义设置器,它完美地分配了新颜色。问题是当我调用 btnTextViewBackGroundColor 方法时,可以说我选择白色。它将它分配给 myColor 但它不会更改 TextView 颜色。因此,当我再次调用它并选择另一种颜色(如黑色)时,它会将其分配给 myColor 并将 TextView 背景更改为白色。 @ctrahey
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2011-09-09
  • 2012-06-22
相关资源
最近更新 更多