Шаги:
A) Соедините ваш UIButton
с контроллером вида поповера, используя тип перехода Present As Popover
. Я действительно должен был создать новый проект, чтобы это появилось, но, вероятно, это как-то связано с базовым SDK.
B) Привести в соответствие контроллер вида, содержащий UIButton
, <UIPopoverPresentationControllerDelegate>
. Например. В свой файл MyViewController.m
добавьте:
@interface MyViewController () <UIPopoverPresentationControllerDelegate>
C) Добавьте метод ниже к View Controller, содержащему UIButton
:
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
return UIModalPresentationNone;
}
D) Добавьте следующее в ваш prepareForSegue:sender:
заменяет ваш segue.identifier
чек:
if ([segue.identifier isEqualToString:@"CatSelectSegue"]) {
UIViewController *dvc = segue.destinationViewController;
UIPopoverPresentationController *controller = dvc.popoverPresentationController;
if (controller) {
controller.delegate = self;
}
}
Проверенный код и подтверждение его работоспособности:
Редактировать: Мое тестовое приложение TPOPViewController. m файл, где происходит волшебство:
#import "TPOPViewController.h"
@interface TPOPViewController () <UIPopoverPresentationControllerDelegate>//, UIAdaptivePresentationControllerDelegate>
@end
@implementation TPOPViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSString *identifier = segue.identifier;
if ([identifier isEqualToString:@"popover"]) {
UIViewController *dvc = segue.destinationViewController;
UIPopoverPresentationController *ppc = dvc.popoverPresentationController;
if (ppc) {
if ([sender isKindOfClass:[UIButton class]]) { // Assumes the popover is being triggered by a UIButton
ppc.sourceView = (UIButton *)sender;
ppc.sourceRect = [(UIButton *)sender bounds];
}
ppc.delegate = self;
}
}
}
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
return UIModalPresentationNone;
}
@end
Моя тестовая раскадровка также:
Не совсем. Используете ли вы WMI для получения системных параметров или для запроса процессов, или для изменения конфигурации, или для отслеживания системных событий, или что-то в этом роде?
Ядро предоставляет много информации и настраиваемые регуляторы через / proc
] и / sys
файловых систем. Никакого языка запросов, только организованная иерархия каталогов и файлов. Некоторые из этих файлов доступны только для чтения, чтения-записи или только для записи; некоторые из них поддерживают опрос
.
Некоторые службы могут иметь настраиваемые клиенты для запроса и обновления конфигурации на лету - chrony chronyc
приходит в Обратите внимание, но даже самый простой init
имеет initctl
. Новые сервисы, такие как HAL , могут подвергаться интроспекции и манипулированию посредством D-Bus .
Взгляните на интерфейсы / proc. Там вы можете получить много системной информации. Также существует множество отличных утилит для сбора системной информации. Пакеты sysstat - это всегда одна из первых вещей, которые я устанавливаю в наши дни.
Изменить: вы также всегда можете запросить SNMP. По умолчанию отображается много информации.
Инструментарий управления Windows (WMI) - это реализация Microsoft стандарта WBEM (веб-управление предприятием) от Целевой группы распределенного управления . Эти стандарты доступны и используются в нескольких разновидностях систем * nix. В качестве примера приведем проект SourceForge , который включает WBEM в системах Linux. Существует стандарт под названием CIM (общая информационная модель), который описывается DTMF следующим образом:
CIM предоставляет общее определение управленческая информация для систем, сети, приложения и услуги, и позволяет использовать расширения поставщика. Общие определения CIM позволяют поставщиков для обмена семантически богатыми информация управления между системами по всей сети.