Objective-C - 从不同的类访问属性[重复]

Posted

技术标签:

【中文标题】Objective-C - 从不同的类访问属性[重复]【英文标题】:Objective-C - Accessing property from different class [duplicate] 【发布时间】:2013-05-23 11:25:42 【问题描述】:

所以在我的VC1.h 中我得到了:

@property (weak, nonatomic) IBOutlet UIButton *monthly;

这连接到视图上的按钮,该按钮连接到VC1 类。 如何在不同的类中访问此按钮的 .enabled 属性?

编辑:

我有一个连接到 tableview 的类。在表格视图中选择特定行时,我想禁用主类中的按钮。我只需要知道如何获取按钮的当前状态并在另一个类中禁用它。

IBaction 来自按钮:

- (IBAction)monthly:(id)sender 
[monthly setSelected:YES];
yearly.enabled = YES;

if([monthly isSelected])

    NSLog(@"monthly ON");
    [yearly setSelected:NO];
    monthly.enabled = NO;

    _dateSpecifiedYearButton.hidden = TRUE;
    _dateSpecifiedYearButton.enabled = NO;
    _dateSpecifiedButton.hidden = FALSE;
    _dateSpecifiedButton.enabled = YES;



Tableview.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

[popoverSpending dismissPopoverAnimated:YES];

UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
if([self.delegate respondsToSelector:@selector(spendingButtonText:)]) 
    [self.delegate spendingButtonText:cell.textLabel.text];


if (indexPath.row == 2) 
    NSLog(@"2");

    ViewController *vc = [[ViewController alloc] init];
    if (vc.monthly.enabled)
    
        vc.monthly.enabled = NO;
        vc.yearly.enabled = NO;           
    


[self dismissViewControllerAnimated:YES completion:nil];

以上是可能对这个问题很重要的代码部分。

【问题讨论】:

(instance of VC1).monthly.enabled?访问属性并没有什么神奇之处。 VC1 和 VC2 是如何关联的? @mAu 好吧,我似乎无法弄清楚。你的建议对我没有帮助。 你的问题是你如何实例化 vc - 只是做一个 alloc init 会创建一个与你在屏幕上的实例不同的实例。你需要说明你是如何从 ViewController 到带有 table view 的控制器的。这两个控制器之间的关系对于回答您的问题很重要。 【参考方案1】:
VC1 *vc = [[VC1 alloc] init];//Allocate VC1 in appDelegate, if you allocate VC1 in VC2, then it allocates new instance. 


AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (app.vc.monthly.enabled)//chk button state


【讨论】:

感谢您的解释。似乎我可以通过这种方式访问​​属性,但是我的按钮状态并没有改变。 ViewController *vc = [[ViewController alloc] init]; if (vc.monthly.enabled) vc.monthly.enabled = NO; vc.yearly.enabled = 否; @Tarayaa chk 我的更新答案。 我需要在一个类的 didSelectRow 方法中访问启用状态。所以启用的检查不能在 appDelegate 中。我应该在我的 appdelegate 哪里分配它? 在 appDelegate 中只分配 VC1。通过在表 didSelectRow 方法中创建 appdelegate 实例来检查按钮状态。 那么你应该明确表达你的目标是什么

以上是关于Objective-C - 从不同的类访问属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 中,如何设置属性的属性,即设置为另一个类属性的类?

UIColor swift 扩展,带有来自 Objective-C 的类访问

如何从同一个故事板访问 Objective-C 和 Swift 类?

自己的类中的objective-c源locationManager

Swift 3.0 令人兴奋,但Objective-C也有小改进--Objective-C的类属性

在 Objective-C 中的类属性上使用单词“set”