self.superview.title = @"i";
соответствует объекту типа UIView
, а UIView
не имеет свойства title
.UIViewController
s имеют свойство parentViewController
, а UIView
s - нет.
Поэтому фундаментальная проблема заключается в том, что вы неправильно разделяете свой контроллер и классы представления.Обычно вы делаете так, чтобы представление, которое вы хотите перехватывать, находилось в подклассе UIControl
(что вроде UIButton
уже есть, но если это пользовательский подкласс UIView
, тогда вы можете просто изменить его на UIControl
подкласс, так как UIControl
сам является подклассом UIView
), затем в свой контроллер добавьте что-то вроде:
- (void)viewDidLoad
{
[super viewDidLoad];
// we'll want to know if the view we care about is tapped;
// we've probably set up an IBOutlet to it but any way of
// getting to it is fine
[interestingView
addTarget:self
action:@selector(viewTapped:)
forControlEvents:UIControlEventTouchDown];
// UIButtons use UIControlEventTouchUpInside rather than
// touch down if wired up in the interface builder. Pick
// one based on the sort of interaction you want
}
// so now this is exactly like an IBAction
- (void)viewTapped:(id)sender
{
self.title = @"My new title";
}
Таким образом, вы явно не вкладываете в представление какие-либо сведения о его положении виерархия представления или то, как ваши контролеры представления намереваются действовать.Вы просто говорите ему, чтобы он выкрикнул, если он получит взаимодействие с пользователем.