菜鸟教程小白 发表于 2022-12-12 23:50:06

iphone - 设置 subview Controller 属性


                                            <p><p>好的,我知道以前有人问过这个问题,并且我尝试了许多不同的方法来完成这项工作,但由于某种原因它不会。我正在尝试将字符串保存到标签的文本属性中。标签位于容器 View 中称为 <code>tableVC</code> 的 subviewController 中,当 UIDatePicker 的值 <code> >datePicker</code> 已更改。我试过了:</p>

<pre><code>tableVC *tVC = [ init];
tVC.timeLabel.text = ;
</code></pre>

<p>并且还尝试过创建一个属性 <code>@property (strong, nonatomic) tableVC *tVC;</code> 然后做:</p>

<pre><code>_tVC = init];
_tVC.timeLabel.text = ;
</code></pre>

<p>但这也不起作用。顺便说一句,我有 <code>#import "tableVC"</code>。我不想要一个复杂的委托(delegate)或协议(protocol)方式,因为我认为我只是犯了一个菜鸟错误。另外,我已经确认 <code></code> 确实使用 <code>NSLog(@"%@", [格式化字符串FromDate:self.datePicker.date]);</code>. </p>

<p><strong>编辑</strong></p>

<p>这里有更多信息以及整个文件。该表是 Storyboard 中定义的静态表。我认为这可能是问题的原因,但即使我将 <code>tableVC</code> 替换为只有一个标签的子类 <code>UIViewController</code> 也不起作用。我认为问题在于我如何设置 subviewController 属性。但是,在其他项目中使用 <code>prepareForSeque</code> 方法时,我没有这个问题。我可以为目标 Controller 的属性设置值没问题,但不能为不是目标 Controller 的 ViewController 的属性设置值。我认为这两个问题是一致的。所有连接均通过 Storyboard 正确建立。</p>

<p>ViewController.h</p>

<pre><code>#import &lt;UIKit/UIKit.h&gt;

@interface ViewController : UIViewController

@end
</code></pre>

<p>ViewController.m</p>

<pre><code>#import &#34;ViewController.h&#34;
#import &#34;tableVC.h&#34;

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIView *containerView;
@property (weak, nonatomic) IBOutlet UILabel *testLabel;
@property (weak, nonatomic) IBOutlet UIDatePicker *datePicker;

- (IBAction)changedDatePickerSelection:(id)sender;

@end

@implementation ViewController

- (void)viewDidLoad
{
    ;

    tableVC *tVC = [ init];
    ;
    ;

    NSLog(@&#34;parent&#34;);
}

- (IBAction)changedDatePickerSelection:(id)sender
{
    NSDateFormatter *formatter = [ init];
    formatter.timeZone = ;
    formatter.timeStyle = NSDateFormatterShortStyle;
    formatter.dateStyle = NSDateFormatterMediumStyle;

    tableVC *tVC = (tableVC *)self.childViewControllers.lastObject;
    tVC.timeLabel.text = ;

    _testLabel.text = ;

    NSLog(@&#34;%@&#34;, );
    NSLog(@&#34;%@&#34;, tVC.timeLabel.text);
}

@end
</code></pre>

<p>tableVC.h</p>

<pre><code>#import &lt;UIKit/UIKit.h&gt;

@interface tableVC : UITableViewController

@property (weak, nonatomic) IBOutlet UILabel *timeLabel;

@end
</code></pre>

<p>tableVC.m</p>

<pre><code>#import &#34;tableVC.h&#34;
#import &#34;ViewController.h&#34;

@interface tableVC ()

@property (weak, nonatomic) IBOutlet UITextField *titleTextField;
@property (weak, nonatomic) IBOutlet UISwitch *onOffSwitch;
@property (weak, nonatomic) IBOutlet UIButton *saveButton;

- (IBAction)saveAlarm;

@end

@implementation tableVC

- (id)initWithStyle:(UITableViewStyle)style
{
    self = ;
    if (self) {
      // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    ;

    NSDateFormatter *formatter = [ init];
    formatter.timeZone = ;
    formatter.timeStyle = NSDateFormatterShortStyle;

    _timeLabel.text = ];
    NSLog(@&#34;%@&#34;, _timeLabel.text);
}

- (BOOL)textFieldShouldReturn:(UITextField*)aTextField
{
    ;
    return YES;
}

- (IBAction)saveAlarm
{
    // do something
}

@end
</code></pre>

<p>另外,这是我的两张图片,展示了当 <code>datePicker</code> 的选择发生变化时,来自 <code>ViewController</code> 的 <code>testLabel</code> 是如何更新的,但是 <code>tableVC</code> 中的 <code>timeLabel</code> 不是。第一个图像是在选择更改之前,第二个是之后。为澄清起见,<code>timeLabel</code> 是第三个单元格右侧的标签,<code>testLabel</code> 是 <code>datePicker</code> 正上方的标签。</p>

<p> <a href="http://cl.ly/image/2Q301v0d2m00" rel="noreferrer noopener nofollow">http://cl.ly/image/2Q301v0d2m00</a> </p>

<p> <a href="http://cl.ly/image/0223183E1t2m" rel="noreferrer noopener nofollow">http://cl.ly/image/0223183E1t2m</a> </p>

<p>感谢您的帮助。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果你只有一个 subviewController ,你可以这样做:</p>

<pre><code>tableVC *tVC = (tableVC *)self.childViewControllers.lastObject;
tVC.timeLabel.text = ....;
</code></pre>

<p>如果你有多个 child ,那么你必须弄清楚哪一个是你想要的,并使用 objectAtIndex: 而不是 lastObject。</p>

<p>编辑后:这就是我所做的。我添加了几个属性并将一些代码移到 viewDidLoad 中,因为每次更改日期选择器时都不需要分配初始化一个新的格式化程序:</p>

<pre><code>#import &#34;ViewController.h&#34;
#import &#34;TableVC.h&#34;

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIView *containerView;
@property (weak, nonatomic) IBOutlet UILabel *testLabel;
@property (weak, nonatomic) IBOutlet UIDatePicker *datePicker;
@property (strong,nonatomic) NSDateFormatter *formatter;
@property (strong,nonatomic) TableVC *tVC;

- (IBAction)changedDatePickerSelection:(id)sender;

@end

@implementation ViewController

- (void)viewDidLoad {
    ;
    self.formatter = [ init];
    self.formatter.timeZone = ;
    self.formatter.timeStyle = NSDateFormatterShortStyle;
    self.formatter.dateStyle = NSDateFormatterMediumStyle;

    self.tVC = (TableVC *)self.childViewControllers.lastObject;
}

- (IBAction)changedDatePickerSelection:(id)sender {

    self.tVC.timeLabel.text = ;
    _testLabel.text = ;
}
</code></pre>

<p>我没有更改 TableVC 中的任何内容,只是将名称大写(您确实应该将您的类名大写)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 设置 subviewController 属性,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/13501850/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/13501850/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 设置 subview Controller 属性