gpt4 book ai didi

iphone - 如何使用 UIAppearance 为子类而不是父类(super class)设置样式?

转载 作者:可可西里 更新时间:2023-11-01 06:11:46 25 4
gpt4 key购买 nike

我正在使用 UIAppearance 设计我的 UINavigationBar 样式.我希望所有后退按钮都具有灰色 文本,并且我所有的 rightBarButtonItems 都具有绿色 文本(颜色是假设的)。由于默认情况下这两个按钮都是 UIBarButtonItems,因此 UIAppearance 将无法区分两者。所以我决定继承一个 UIBarButtonItem,称它为 ActionBarButtonItem。我在任何需要 rightBarButtonItem 的地方使用这个新的子类。

rightBarButtonItem

UIBarButtonItem* done = [[ActionBarButtonItem alloc] 
initWithTitle:@"Done"
style:UIBarButtonItemStyleDone
target:self
action:@selector(onDonePress)];
self.navigationItem.rightBarButtonItem = done;
[done release];

UI外观

NSDictionary* buttonStyle = [NSDictionary 
dictionaryWithObjects:[NSArray
arrayWithObjects:
[UIColor grayColor],
, nil
]
forKeys:[NSArray
arrayWithObjects:
UITextAttributeTextColor,
nil
]
];

NSDictionary* actionStyle = [NSDictionary
dictionaryWithObjects:[NSArray
arrayWithObjects:
[UIColor greenColor],
nil
]
forKeys:[NSArray
arrayWithObjects:
UITextAttributeTextColor,
nil
]
];

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil]
setTitleTextAttributes:buttonStyle
forState:UIControlStateNormal
];

[[ActionBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil]
setTitleTextAttributes:actionStyle
forState:UIControlStateNormal
];

理论上,灰色文本将应用于所有 UIBarButtonItem。然后我只为 ActionBarButtonItems 用绿色文本覆盖灰色文本。最后的结果并不如预期。由于未知原因,每个 UIBarButtonItem 都获得绿色文本。为什么?

enter image description here enter image description here

最佳答案

你是 UIBarButton 的子类,所以我最初的想法是,当你在 ActionBarButtonItem 上调用 appearanceWhenContainedIn 时,结果是调用 super classes appearanceWhenContainedIn 因此这就是发生这种情况的原因。这并不理想,但您可以更改已加载 View 中左右项目的外观,否则 View 将出现在每个 View 中。

NSDictionary* buttonStyle = [NSDictionary 
dictionaryWithObjects:[NSArray
arrayWithObjects:
[UIColor blueColor],nil]
forKeys:[NSArray
arrayWithObjects:
UITextAttributeTextColor,
nil
]
];

NSDictionary* actionStyle = [NSDictionary
dictionaryWithObjects:[NSArray
arrayWithObjects:
[UIColor greenColor],
nil
]
forKeys:[NSArray
arrayWithObjects:
UITextAttributeTextColor,
nil
]
];



[self.navigationItem.leftBarButtonItem setTitleTextAttributes:buttonStyle forState:UIControlStateNormal];
[self.navigationItem.rightBarButtonItem setTitleTextAttributes:actionStyle forState:UIControlStateNormal];

您也可以选择将它放在某个地方,例如您的应用委托(delegate),这样您就可以使用 [[UIApplication sharedApplication].delegate setBarButtonColors] 更简单地访问它。另一种选择可以是 UINavigationBar 上的类别。

关于iphone - 如何使用 UIAppearance 为子类而不是父类(super class)设置样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com