Удалить границу для UIPopoverController
У меня есть требование, где я должен отображать пользовательскую границу для представления всплывающего окна UIPopoverController вместо границы по умолчанию "Черная тема". Является ли это возможным?
Я не могу использовать черную рамку по умолчанию, потому что она не подходит для цветовой темы приложения.
В SDK нет положения, позволяющего это сделать. Я также погуглил, чтобы увидеть, сталкивался ли кто-то еще с этой проблемой, и если они решили ее, но без удачи!
Жду предложений.
Спасибо Радж
2 ответа
Решил это, используя UIView, а также переопределив hitTest в основном представлении rootViewController, чтобы увидеть, находится ли точка касания вне этого представления. Если это так, событие будет использовано для отклонения нового всплывающего окна, в противном случае событие будет перенаправлено в новый всплывающий элемент.
Добавить popview как subview, код:
//!you must define the dimBackgroundView and set view in head file firstly,
//action for a button,to add set view as a subview
- (IBAction)openSetting:(id)sender {
if(!dimBackgroundView)
{
dimBackgroundView = [[UIView alloc] initWithFrame:self.view.bounds];
}
dimBackgroundView.backgroundColor = [[UIColor clearColor] colorWithAlphaComponent:0.0];
[self.view addSubview:dimBackgroundView];
SettingViewController *set = [[SettingViewController alloc]initWithNibName:nil bundle:nil];
[set.view setFrame:CGRectMake(120, 50, 400, 600)];
self.setView = set;
//add shadow
set.view.layer.shadowOffset = CGSizeMake(3, 3);
set.view.layer.shadowColor = [UIColor colorWithRed:70.0/255.0 green:70.0/255.0 blue:80.0/255.0 alpha:1.0].CGColor;
set.view.layer.shadowOpacity = 0.8;
[self.view addSubview:set.view];
}
//check touch position, if touch position is outside of setview, remove it from superview
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event{
UITouch *touch = [[event allTouches] anyObject];
if ([self.setView.view superview] && self.dimBackgroundView == touch.view) {
[self.dimBackgroundView removeFromSuperview];
[self.setView.view removeFromSuperview];
}
}