【问题标题】:Sending value on Button click from UIView to its superview's superview(UIViewController) -iOS将按钮单击上的值从 UIView 发送到其超级视图的超级视图(UIViewController)-iOS
【发布时间】:2018-04-24 16:17:54
【问题描述】:

我有一个名为 HomeViewController 的 ViewController。它的子视图是ActivityView (UIView)。 ActivityView 的子视图是ActivityCard (UIView)。在 ActivityCard 中,我有一个名为 Enter 的按钮。单击它,我需要将所有文本字段的值从 ActivityCard xib 发送到 HomeViewController 并从那里调用 API。我以前从未使用过 xib,因此无法管理这种情况。任何帮助将不胜感激!

编辑:

ActivityCard.h

@interface ActivityCard : UIView


- (IBAction)actionEnterClick:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *lblActivityCount;
@property (weak, nonatomic) IBOutlet UIButton *enterButton;

@end

ActivityView.h

@interface ActivityView : UIView

@property (strong) ActivityCard *card;
@property (weak, nonatomic) IBOutlet iCarousel *carousel;

@end

ActivityView.m

- (UIView *)carousel:(__unused iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view
{
if (view == nil)
    {
        _card = (ActivityCard*) [[[NSBundle mainBundle] loadNibNamed:@"ActivityCard" owner:nil options:nil] objectAtIndex:0];

        _card.frame = CGRectMake(0, 0, 280.0, 350.0);
        _card.layer.cornerRadius = 10.0f;
        view = _card;
    }
    return view;
}

HomeViewController.h

@interface HomeViewController : UIViewController

@property (strong) ActivityView *viewActivity;

@end

HomeViewController.m

_viewActivity = (ActivityView*) [[[NSBundle mainBundle] loadNibNamed:@"ActivityView" owner:nil options:nil] objectAtIndex:0];
    _viewActivity.frame = CGRectMake(0.0f, 0.0f, _viewContainer.frame.size.width, _viewContainer.frame.size.height);
    [_viewActivity updateActivityUI];

    for (UIView *child in _viewContainer.subviews) {
        [child removeFromSuperview];
    }
    [_viewContainer addSubview:_viewActivity];

    [_viewActivity.card.enterButton addTarget:self action:@selector(enterButtonDidTouch) forControlEvents:UIControlEventTouchUpInside];

    [_viewActivity.card.lblActivityCount setText:@"11"];

此代码是在我们需要在单击按钮时加载 ActivityView 时编写的。

【问题讨论】:

    标签: ios objective-c uiview uiviewcontroller delegates


    【解决方案1】:

    有很多方法可以做到,我会告诉你一个我认为最简单的方法。

    • ActivityCard.h 中的所有文本字段创建Enter Buttonproperty 中的property
    • HomeViewController 中,使用下面的代码为您的Enter Button 添加操作。

      [self.activityView.cardView enterButton addTarget:self action:@selector(enterButtonDidTouch) forControlEvents:UIControlEventTouchUpInside];
      
    • HomeViewController.m名称enterButtonDidTouch中创建一个方法

      - (void)enterButtonDidTouch {
          NSString *textOfTextField1 = self.activityView.activityCard.textField1.text;
          // With the same way you can get others text of text fields and use them
      }
      

    【讨论】:

    • 该方法没有被调用。有什么我可能遗漏的吗?
    • 当我尝试将标签文本从 HomeViewController 设置为 ActivityCard 时,它没有正确设置值。我试过了:[_viewActivity.card.lblActivityCount setText:@"11"];
    • 如我所见,你做对了。你能告诉我你是如何实现它们的吗? @迪亚
    • 我已经编辑了我的问题并将所有代码放在那里
    • 我猜,你有不止 1 个活动卡。在这种情况下,您应该为ActivityCard 创建delegate
    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2019-04-06
    • 2015-02-07
    相关资源
    最近更新 更多