• Как заменить метод в категории Objective-c?

    Flanker_4
    @Flanker_4
    Я думаю тут поможет swizzling ,
    Вот подробней: stackoverflow.com/questions/5371601/how-do-i-imple...
    Единственное в чем не уверен, так это в категориях
    Ответ написан
    Комментировать
  • Какие есть best practice для проектов под iPhone?

    Flanker_4
    @Flanker_4
    1) Уже обсуждали эту тему. Считаю, что полный отказ от стори боарда - глупостью. Стори боард существенно упрощает жизнь при проектировании интерфейсов, особенно когда Вы поддерживаете весь спектр девайсов (ретина/не ретина, ios 6/7, ipad/iphone/iphone 4").
    К примеру, у вас есть кнопка, которая повторяется на куче экранов. Объявляете класс XXXButton, унаследованный от UIButton. В нем реализуете метод
    -(void) setupButton, где тем же кодом прописываете все нужные изменения (шрифт, цвет, бэкграунд)
    Далее переопределяете метод -(void)awakeFromNib или метод -(id)initWithCoder и вызываете в нем метод setupButton.
    В storyboarde добавляете обычную кнопку, но изменяете ей тип с UIButton на XXXButton. Аналогично для других элементов UI. Получаете эдакий кривоватый аналог css+html.
    Еще есть вариант выноса кнопки в отдельный xib и загрузки ее от туда. Но от этого может очень упасть производительность.
    Ну и да, иногда использование storyboardov действительно не оправдано...

    Насчет таблицы, Apple любит многое переделывать в новых версиях прошивки, и те костыли, которыми Вы добивались нужной Вам верстки, могут внезапно сломаться. Все таки UITableView создана для списков.

    2)stackoverflow.com/questions/5210535/passing-data-b... . Посмотртите ближе к концу ответ, отмеченный как правильный. NotificationCenter не самое лучшее решение. Более того, отсылая нотификацию нельзя быть уверенным, что ее вообще кто-то получит. Да мало ли там что на том конце провода, а если получатель ViewController еще не создан на момент отсылки нотификации?

    3)
    - нормально ли, если связанные файлы как в java выделяются в отдельные каталоги. Или просто в x-code создавать виртуальные каталоги (refs), а реально все файлы складывать в одну папку.

    Мне кажется лучше первый вариант. Потому как с проектом можно взаимодействовать не только через xcode
    - именование классов контроллеров. ContactsEditorViewController vs ContactsEditor.

    Лучше указывать что это конкретно ViewController, и да, не забывайте о префиксах. А еще очень рекомендую заглянуть на developer.apple.com. Там есть несколько статей о соглашениях по именованию классов, методов и т.п. Некоторые фичи без "правильных" имен могут сломаться (kvo , arc)
    Да и всегда можно почитать рекомендации от того же гугла...

    4) Локализация
    Это разные инструменты для разных целей. NSLocalizedString используется когда вам нужно перевести текст интерфейса. Storyboard localize - когда Вам нужно переделать интерфейс. Что бы Вам было понятней, представьте, что делается приложение ориентированное только на западного пользователя. NSLocalizedString хватит с головой, была кнопка Home, стала Домой :).
    А вот если Вы захотите продавать приложение где-то на востоке, то тут окажется, что есть иероглифы, написание справа на лево/сверху вниз. Да и вообще, не умеют они думать квадратно гнездовым способом, им подавай абсолютно другой интерфейс.
    Ответ написан
    Комментировать
  • Почему пуш-уведомления перестают приходить на iOS устройства?

    Flanker_4
    @Flanker_4
    Есть дока с описанием возможных проблем с push notification. Что-то мне подсказывает, чторазделы Registration Succeeded But No Notifications Received и Some Notifications Received, but Not All могут Вам помочь.
    Ответ написан
    Комментировать
  • Проблема с PopoupViewController [видеовопрос]?

    Flanker_4
    @Flanker_4
    насчет второго, Вы всегда можете запретить GestureRecognizer'у реагировать на тапы в некоторых view'ушках. Примеры в документации или тут
    stackoverflow.com/questions/15814697/uitapgesturerecognizer-tap-on-self-view-but-ignore-subviews
    Насчет первого, скорей всего проблема в
    [self presentViewController:popupViewController animated:YES completion:nil];
    Насколько я помню, с анимацией через presentViewController возникают проблемы , если вы хотите оставить под низом старый viewController. stackoverflow.com/questions/7256652/why-does-presentmodalviewcontrolleranimated-turn-the-background-black/ . Идея такова (а особенно на iPhone), что должен присутствовать только один активный viewController на сцене.
    Конечно можно попробывать поиграть с modalTransitionStyle
    и прочими property, отвечающими за стиль анимации, но как показывает практика, в новых версиях ios это может сломаться. Можно сделать свою кастомную анимацию добавления поповера через
    [self.view addSubview:popupViewController.view]; и [UIView animationWithDuration]
    Но я бы рекомендовал посмотреть в сторону стандартных элементов управления, к примеру ActionSheet
    Ответ написан
  • Как повторно использовать View Controller в проекте с использованием storyboard?

    Flanker_4
    @Flanker_4
    У Вас не получится так сделать. Storyboard всегда грузит указанный в свойствах класс. И даже попытки поиграться с рантаймом не дают никакого эффекта: я пробовал переопределять initWithCoder и возвращать класс наследник. Приложение падает с пометкой, что ожидается другой класс на выходе. Т.е. после загрузки storyboard проверяет что бы все было чин чином...

    Что можно сделать, что бы решить Вашу проблему:
    - создавать вьюшку для viewController'a кодом (-loadView), т.е. отказаться от Storyboard. Субьективно, не самое лучшее решение.
    - В самом storyboard продублировать viewController, указав нужный класс для него. Самое быстрое решение, но Вам прийдется поддерживать по сути два одинаковых представления. Если позже нужно будет допиливать проект, то Вы очень обрадуетесь:)
    - использовать xib для таких дублирующихся viewController'ов. Насколько я помню initWithNib позволит корректно загрузить вьюшку в класс наследник. Неуверен в этом, правда...
    - сделать Add view controller контейнером, содержащим DetailController. Т.е. Загружать detailController из storyboard'a и добавлять его посредством addSubview в AddViewController. Или еще одно извращение из той же оперы , вытащить из этого загруженого DetailViewController'a саму вьюшку, установивть корректно outlets и actions и убить загруженный вью контроллер. У меня так получилось, но это все от лукавого.
    Ответ написан
  • Почему приложение Amazon Kindle под iOS7 постоянно перегружает экран после возвращения из другого приложения?

    Flanker_4
    @Flanker_4
    Как правило, "перезагрузка" экранов происходит при нехватке памяти. Когда Вы переходите в тот же Abby Lingvo он запрашивает слишком много памяти, система просит потесниться AmazonKindle и он выгружает себя (либо какую-то часть себя). iPad mini слабенький в этом плане

    Как вариант, попробуйте убить(всмысле выгрузить из памяти в панели где отображены все запущенные app) все лишние приложения , оставив только эти два. Ну или поставить другой словарь, который будет кушать меньше ресурсов. Возможно поможет... просто еще есть вариант, что так и было задумано разработчиками Amazon Kindle. Тогда этот совет мимо кассы

    До кучи, вот вам лайфхак
    http://ebookfriendly.com/translate-words-in-kindle-app/
    Ответ написан
    Комментировать
  • Передача данных View Controller - View, странное поведение?

    Flanker_4
    @Flanker_4
    Когда я пытаюсь вывести в консоль индекс в следующем методе

    Ну давайте поиграем в телепатов. Мой ход.
    Беглый взгляд на код PagedFlowView заставляет ужаснуться, так как перезагрузка этой кастомной таблицы происходит в layoutSubviews по некоему флагу _needsReload, который приватный (1), при инициализации приложения устанавливается в YES(2) и... больше никогда не сбрасывается(3). Таким образом, каждый раз, когда этому PagedFlowView посылается setNeedsLayout он перезагружает данные из дата соурса. А setNeedsLayout вызывается наверное часто....

    Насчет первого, а бог его знает. половину кода нет, тут даже угадать сложно
    Ну а это вообще что-то термоядерное
    - (void)drawRect:(CGRect)rect{
    [self initMehod];
    }
    Ответ написан
    2 комментария
  • Ошибка при запуске проекта в xCode 5 после подключения MessageUI?

    Flanker_4
    @Flanker_4
    Вы не поверите!
    Банальное переименовывание ViewController'a с MPViewController в, к примеру, BBViewController (контекстное меню на объявлении класса, Refactoring, Rename)
    решает проблему. Почему? не знаю?
    Доброжо пожаловать в суровый мир objective-c
    Ответ написан
  • Как заменить кнопки в ios RemoteControl?

    Flanker_4
    @Flanker_4
    Если мне не изменяет память, то никак (конечно если речь идет о приложении, размещаемом в AppStor)
    Но вот так сразу подтверждения в документации не смог найти.
    Ответ написан
    3 комментария
  • Проблема с кастомным TabBarController в ios7 [видеовопрос]?

    Flanker_4
    @Flanker_4
    А можно посмотреть исходники этого проекта?
    У Вас после перехода на след. экран высота frame'а таблицы увеличивается на высоту tapBar'a. Такое чувство что при обратной анимации эта высота не сбрасывается, и так и остается большей на высоту tapBar'a.
    Таблица, это же _contentView?
    если так, то посмотрите чему равно
    _isTabBarHidding
    при выполнении обратной анимации в строке
    .size.height = CGRectGetHeight(self.bounds) — ((!_isTabBarHidding)? CGRectGetHeight(_tabBar.bounds): 0)
    есть предположение, что _isTabBarHidding == YES (хотя должно быть NO).
    Если так, то скорей всего layoutSubview вызывается раньше, чем Вы обновляете _isTabBarHidding, и Вам нужно принудительно послать базовой вьюхе setNeedsLayout, после установки _isTabBarHidding == NO
    Но повторюсь, без исходников
    Ответ написан
  • Как YouTube сделал автовоспроизведение видео в iPad и iPhone?

    Flanker_4
    @Flanker_4
    А посмотрите на js вот с этого сайта
    ссылка на первый попавшийся фильм
    У меня на втором паде с iOS 6.1 автоматически воспроизводится видео(кстати оооочень раздражает)
    Ответ написан
    Комментировать
  • Будет ли работать приложение для Windows 8, загруженное не из Windows Store?

    Flanker_4
    @Flanker_4
    Погуглил. Да, будет
    stackoverflow.com/questions/12512196/how-to-install-a-windows-8-app-without-submitting-to-store
    Хотя там речь не о полноценной устанвоке
    Ответ написан
    Комментировать
  • Как правильно работать c временными данными в CoreData?

    Flanker_4
    @Flanker_4
    А зачем Вы временные объекты заносите в хранилище.
    Почему бы не держать их просто в памяти, а после выбора пользователем вносить только выбранный?
    Ответ написан
  • Разработка приложения под OS X, проблема с глобальными NSEvent

    Flanker_4
    @Flanker_4
    Это?
    Там есть пример для ctrl alt cmd + t

    I'm posting the code that worked for my case.

    I'm adding the global event handler after the app launches. My shortcut makes ctrl+alt+cmd+T open my app.

    - (void) applicationWillFinishLaunching:(NSNotification *)aNotification
    {
        // Register global key handler, passing a block as a callback function
        [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask
                                               handler:^(NSEvent *event){
    
            // Activate app when pressing cmd+ctrl+alt+T
            if([event modifierFlags] == 1835305 && [[event charactersIgnoringModifiers] compare:@"t"] == 0) {
    
                  [NSApp activateIgnoringOtherApps:YES];
            }
        }];
    
    }
    
    Ответ написан
    3 комментария
  • Не воспроизводится HTML5 видео до полной загрузки + 4k видео тест

    Flanker_4
    @Flanker_4
    Посмотрел на ipade 2 (ios6)

    Проигрывается все видео, кроме 4k (кнопка play перечеркнута). не уверен, что пад 2 может 4к…

    Ну и почему-то блок с видео выглядит странно: высотой в 100px, при этом растянут на весь экран по ширине(1000px). Получаются такие широкие вертикальные полосы.
    Ответ написан
    2 комментария
  • Симулятор жидкости?

    Flanker_4
    @Flanker_4
    Вот тут интересная статья habrahabr.ru/post/139028/, но для воды в 2D.
    Ответ написан
    Комментировать
  • Возможно ли на симуляторе смоделировать процесс обновления приложения?

    Flanker_4
    @Flanker_4
    Попробуйте:
    -собрать «старую» версию приложения
    -поработать с приложением/сформировать пользовательские данные. Ну или выгрузить эту папку через органайзер с девайса.
    -не удаляя, собрать через xcode новую версию приложения

    Приложения, установленные на симе, находятся в папке Application Support (там же вы можете посмотреть/изменить пользовательские данные)
    Ответ написан
    Комментировать
  • IOS для слабовидящих?

    Flanker_4
    @Flanker_4
    Посмотрите на эти документы
    общая информация
    iphone
    ipad
    Хоть это и раздел для разработчиков, но в начале идет описание основных возможностей платформы.

    Отдельный плюс в том, что эти фичи доступны в sdk для сторонних разработчиков. Правда есть и минус, как правило разработчики забивают на эти фичи.

    нтересен набор текста, отправка смс, почты и поиск контактов голосом


    When you’re typing text, such as an email message or a note, VoiceOver echoes each character on the keyboard as you touch it, and again to confirm when you enter it. You can also have VoiceOver speak each completed word instead of or in addition to individual characters as you type them. A flick up or down while typing moves the insertion point cursor left and right within the text so you can edit a word just as easily and precisely as typing a new word.

    Хотя есть и русские аналоги Сири (проскакивали статьи на хабре пару раз, но сейчас не смог найти и о возможностях этих программ не знаю), а так же для jailbreak девайсов есть русская «сири»
    www.prostomac.com/2012/03/russkaya-siri-vyshla-jailbreak/
    Ответ написан
    Комментировать
  • UIImageView в UITableView «летает» слева направо?

    Flanker_4
    @Flanker_4
    1) В чате может быть очень много сообщений. К тому же в каждей ячейке у Вас присутсвует UIImageView с картинкой бабла (хотя возможно UIImage и кэшируется) далеко не 10х10 пикселей (+ ретина). А еще приложение могут запустить после какого-то айосовского фаркрая, когда свободной памяти у системы будет очень мало. Лучше все таки использовать reuse там где это возможно. Ну да ладно.
    2) Да, будет, но только после того, как ячейка станет частью таблицы (а это точно произойдет после return в методе делегата, если там нет никакой магии в init cell'a). А на этапе setDate — это просто ячейка, существующая в памяти. Сейчас наверное нет проблем из-за того, что у Вас выставленны autoresizingMask на растягивание. Попробуйте перенести код, отвечающий за формирование размеров бабла в метод делегата willDisplay, возможно это решит проблему.
    Но лучше прислушайтесь к моему предыдущему совету.
    Есть еще вариант, что Вы выложите проект-пример, воспроизводящий проблему, ведь сейчас слишком много скрыто: среди прочего не ясно как формируется data, а там много значений размеров. Но мне не очень хочется ковыряться в Вашем коде :)
    Ответ написан