如何通过子视图循环,以获得NSTextViews文(How to loop through subv

2019-10-31 21:13发布

我有一个包含NSTextView的几个实例一的NSView。 我想获得每个实例的内容(字符串)。 到目前为止,我有这个(此代码不编译):

for(NSView *view in [self subviews]) {
    NSLog(@"class: %@ ", [view className]);
if([view isKindOfClass:[NSTextView class]])
    NSLog(@"[view string] %@",[view string]);}

在这一点上,我希望能够发送string消息, view是NSTextView的实例,但是:

Error message: No visible @interface for 'NSView' declares the selector 'string'

哪里是我的错误?

Answer 1:

你可能只需做一个简单的铸件,让编译器的接受。 你可以用任何一个局部变量,或更复杂的内联投做到这一点:

for(NSView *view in [self subviews]) {
  NSLog(@"class: %@ ", [view className]);
  if([view isKindOfClass:[NSTextView class]]) {
    NSTextView *thisView = (NSTextView *)view;
    NSLog(@"[view string] %@",[thisView string]);
  }
}

要么

for(NSView *view in [self subviews]) {
  NSLog(@"class: %@ ", [view className]);
  if([view isKindOfClass:[NSTextView class]])
    NSLog(@"[view string] %@",[(NSTextView *)view string]);
}

编辑:我西港岛线提就是我们所说的“鸭打字” ......如果它响应您要发送的选择,您可以考虑要求的对象,而不是它是否是你期待(如果它叫起来像鸭子之类的,它是鸭子...)。

for(NSView *view in [self subviews]) {
  NSLog(@"class: %@ ", [view className]);
  if([view respondsToSelector:@selector(string)]) {
    NSLog(@"[view string] %@",[view performSelector:@selector(string)]);
  }
}


文章来源: How to loop through subviews in order to get the text of NSTextViews