Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Добавить чекмарки в UITextView?

Приветствую,

кто знает, хотя бы ваше предположение, как было реализовано добавление checkmarks в Приложении Apple Notes ? Задача: добавить чекмарки в UITextView?
И каким контролом может добавляеться сама checkmarks? Кто может помочь с этим? Казалось бы - простая задача,но уже третий день разбираюсь.

Очень надеюсь на вашу помощь

Спасибо
Федор
Ответ: Fedor Petrenko, Готовых в Xcode нет. подключайте библиотеки
Вопрос: UITextView неактивно

Обыкновенный UITextView.  Нужен для ввода нескольких строк текста.  Размещаю, прописываю и привязываю аутлет.   На Behavior/Editable ставлю галку.  Запускаю - всё красиво, но изменять текст не могу.  Клавиатура (iPad) не выезжает.   Добавляю tv.editable=YES - всё то же.

Господа знатоки, ещё какие-то фокусы имеются?
Ответ:
какая-то ерунда.  Создал ещё одно окошко на пробу.  Та же беда...  Вызываю контроллер, который в самом начале был (гарантированно - рабочий) - та же история....  :shok 
Вопрос: Правильная обработка нажатя кнопки в TableView

Здравствуйте. Пишу на Mono. Заполнил таблицу кастомными ячейками, состоящими из кнопки и лейбла и огбычными. При нажатии на кнопку в ячейке соответствующая ячейка должна удалиться. Вот код:
Кликните здесь для просмотра всего текста

Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
        {
            _tableView = tableView;
 
            var cur_lang =  _User_Data.cur_lang;
 
            if (TextLabelList.Count > 0)
                TextLabelList.RemoveRange (0, TextLabelList.Count);
 
            TextLabelList.Add (cur_lang._add_str);
            TextLabelList.Add (cur_lang._del_all);
 
            foreach (string str in _User_Data.name_mash_picker_list)
                TextLabelList.Add (str);
 
 
            //первые две и после основного списка ячейки идут с кнопкой
            if ((indexPath.Row < 2) || (indexPath.Row >= _User_Data.name_mash_picker_list_start_Count+2)) 
            {
                //"CellID_But"
                var cell = tableView.DequeueReusableCell ("CellID_But") as customViewCell_with_Button;
 
                if (cell == null)
                    cell = new customViewCell_with_Button ();
                    
 
                if (cell.cell_button.Tag == 0) {
                    cell.cell_button.Tag = indexPath.Row;
                    cell.cell_button.TouchUpInside += Touch_Delbtn_on_cell;
                }
                            
                cell.cell_Label.Text = TextLabelList [indexPath.Row];
 
                return cell;
            } 
            else
            {
                //далее обычные ячейки
                UITableViewCell cell = tableView.DequeueReusableCell ("cellIdentifier");
                // if there are no cells to reuse, create a new one
                if (cell == null)
                    cell = new UITableViewCell (UITableViewCellStyle.Default, "cellIdentifier");
                cell.TextLabel.Text = TextLabelList [indexPath.Row];;
                return cell;
            }
 
 
        }
 
 
               void Touch_Delbtn_on_cell(object sender, EventArgs e) //обработчик нажатия кнопки удалить
        {
            var but = (UIButton)sender;
            _User_Data.name_mash_picker_list.RemoveAt (but.Tag-2); //удалить элемент соответствующий кнопке
 
            _tableView.ReloadData ();
            System.IO.File.Delete (dbPath); //удалить файл
            BinaryWriter bw = new BinaryWriter(new FileStream(dbPath, FileMode.OpenOrCreate));
            for(int i=_User_Data.name_mash_picker_list_start_Count; i<_User_Data.name_mash_picker_list.Count; i++)  //переписать текущий список в файл
                bw.Write(Convert.ToDouble(_User_Data.name_mash_picker_list[i]));
            bw.Close(); 
 
        }

Но так как GetCell вызывается каждый раз при появлении ячейки на экране (например вышла из поля невидимости при скролле), то и обработчик события нажатия добавляется несколько раз и соответственно вызывается потом при нажатии тоже несколько раз. Что приводит к удалению не только своей но и соседних ячеек, так как те уже успели поменять свой индекс в списке. Никакой проверки на то, был ли уже добавлен объекту обработчик событий или нет, я не знаю.. Подскажите как быть в такой ситуации? Подобный вопрос я нашел на ксамариновском форуме, но решения я там что то не увидел: https://forums.xamarin.com/discussio...itableviewcell У меня есть конечно одна идея на этот счёт, но я ещё не проверял, насколько она рабочая. В общем кнопку на ячейке сделать объектом дочернего класса, наследованного от UIButton в котором лишь добавить свойство String_Tag, в которое при добавлении ячейки писалось бы то же самое что и на лейбле. А в обработчике нажатия искать элемент в списке с таким текстом и удалять. Таким образом заходить в обработчик может сколько угодно раз, но удалять только один, в остальных случаях он просто не найдет этот элемент в списке. Но это - костыль, а как правильно? Подскажите.
Ответ:
Метод dequeueReusableCell (начиная с какого-то обновления iOS) сам создает ячейку при необходимости (хотя кажется это работает только если табличка в сториборде, для нибов все по старому).
Я как раз со сторибордом и работаю.
Можно удалить все предыдущие обработчики перед добавлением нового.
Можно, но не известно сколько их было добавлено до этого, чтобы знать сколько удалять.
Можно передавать в кастомную ячейку блок, который будет вызываться при нажатии кнопки (или что там в C# вместо блоков? Лямбды?).
Не до конца понял что вы имеете в виду.
В общем сегодня сделал так, как задумывал на выходные. И все заработало. Переопределил класс кнопки кастомной ячейки дочерним классом от UIButton, добавив в него строковое свойство Tag_String.
И в GetCell написал такой вот код:
Код C#
1
2
3
4
5
6
cell.cell_button.Tag = indexPath.Row;
if(cell.cell_button.Tag_String==null)
        cell.cell_button.TouchUpInside += Touch_Delbtn_on_cell;
cell.cell_button.Tag_String=TextLabelList[indexPath.Row];
cell.cell_button.SetBackgroundImage(image, UIControlState.Normal);
cell.cell_Label.Text = TextLabelList [indexPath.Row];
А в обработчике нажатия вот такой:
Кликните здесь для просмотра всего текста

Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    void Touch_Delbtn_on_cell(object sender, EventArgs e)
        {
            var button = (UIMyButton_on_cell)sender;
 
            if (button.Tag == 0) {
                Add_new_element (_tableView);
                return;
            }
            if (button.Tag == 1) {
                Del_all_element (_tableView);
                return;
            }
 
            var findindex = _User_Data.name_mash_picker_list.FindIndex(x => x.Equals(button.Tag_String)); //найти элемент в списке с такой строкой.
            
        
            if(findindex>1)
                _User_Data.name_mash_picker_list.RemoveAt (findindex);//удалить этот элемент
                
            _tableView.ReloadData ();
            System.IO.File.Delete (dbPath); //удалить  файл-список
            BinaryWriter bw = new BinaryWriter(new FileStream(dbPath, FileMode.OpenOrCreate));
            for(int i=_User_Data.name_mash_picker_list_start_Count; i<_User_Data.name_mash_picker_list.Count; i++)  //переписать текущий список в файл
                bw.Write(Convert.ToDouble(_User_Data.name_mash_picker_list[i]));
            bw.Close(); 
 
        }

Теперь в обработчик заходит только один раз и делает все что мне надо. Всем спасибо!
Вопрос: ERROR itms-9000. This bundle is invalid

ERROR ITMS-9000: "This bundle is invalid. The IPA format requires a top-level directory named Payload, containing only a .app bundle and optional plugins in a Plugins directory."

Кто-нибудь может подсказать что я не так делаю при добавлении приложения в itunes connect через apllication loader, который и выдает мне эту ошибку?
Сертификаты и профайлы настроены, делаю cmd+B , в products появляется 2 файла, myApp.app и myApp.dSYM.
Я делаю из них архив .zip и пытаюсь его загрузить через application loader и вовремя "Veryfying assets with iTunes store"
выдает ошибку что вверху. =(

Добавлено через 56 минут
В стор посылать вообще-то надо из Xcode через Product->Archive , как заархивируется выведется окно органайзера с описание что вы уже архивировали для этого проекта и там же будут кнопки validate - export - submit, submit и шлет в стор. Через export - export for AppStore тоже можно с последующей заливкой.

Можно и самому составить ипа (зип архив) с нужной структурой, какая она конкретно точно не помню, но само приложение валяется в папке Payload (о чем вам и сообщили)
... ;d
Ответ: так я все выложил уже, скинул этот ответ просто чтобы был

Добавлено через 1 минуту
А выкладываю 1 раз, и читал как добавить в itunes connect из гугла статью, в ней было описано все что я делал выше( cmd+build , 2 файла их в зип и через лоадер добавлять), в итоге у меня полезли ошибки.
Вопрос: Скопировать из видео библиотеки файл в папку докум

Задача: скопировать из видео библиотеки файл в папку документ программы.
Все бы хорошо но xcode после выбора зачем то "Сжатие видео..."
Как это дело отменить?
Код

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    
    // Displays movie capture control
    picker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
    
    picker.allowsEditing = NO;
    picker.delegate = self;


Добавлено через 2 минуты и 48 секунд
Нашел на форумах
Код

picker.videoQuality = UIImagePickerControllerQualityTypeHigh;


не помогло:(
Ответ:
Задача: скопировать из видео библиотеки файл в папку документ программы.
Все бы хорошо но xcode после выбора зачем то "Сжатие видео..."
Как это дело отменить?
Код

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    
    // Displays movie capture control
    picker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
    
    picker.allowsEditing = NO;
    picker.delegate = self;


Добавлено через 2 минуты и 48 секунд
Нашел на форумах
Код

picker.videoQuality = UIImagePickerControllerQualityTypeHigh;


не помогло:(
Вопрос: Где обрабатывать нажатие кнопки

Здравствуйте. Возник такой вопрос, где обрабатывать событие нажатия кнопки, которая лежит внутри ячейки (кастомной)? Вроде как логично, что бы обработчик нажатия кнопки в ячейке обрабатывала сама ячейка, но может быть я ошибаюсь?

Добавлено через 4 минуты
Или обрабатывать нужно в tableViewController?
Ответ: А это зависит. Можете выставлять firstResponder ваш контроллер, а в cellForRowAtIndexPath проставлять тэг в эту кнопку.
А можете в cell добавить свойство с блоком и в обработчике нажатия вызывать этот блок.

Как удобнее - так и делайте. Если логики немного - без разницы.
Вопрос: Ошибка при передаче архива в Appstore

Добрый вечер. Такая странная фигня, пытаюсь отослать новую сборку приложения в стор, а он мне отдает вот такую ошибку (во вложении), буквально недавно всё отправлялось - пока не добавил кастомный шрифт и обновил pods зависимости (pod update). причем попытался отправить другое приложение - всё норм, то есть проблема тупо с этим проектом, но что за ошибки не могу понять. И кстати валидацию проходит норм (с зеленой галочкой в конце)
Ответ: проект пересоздал - настроил все зависимости заново - ну гугл тоже качнул с репы последней версии - и блин опять та же фигня, вот щас пустой проект попробую сабмитить....

Добавлено через 1 час 31 минуту
мда, версия гугл мапс 1.11.1 - глючная (видимо с размером они не учли косяк)
так что проверенной является версия 1.9.2 - только что заслал в апстор - и всё прошло успешно))
спасибо, Vorona был прав)) дело в либе от гугла
с наступающем)
Вопрос: продаю 77 казахстан моб картел

продаю 77  казахстан моб картел 
Есть 120 линий (GSM). 
Прийму качественный трафик, 
skype:sky.maling

Добавлено через 15 секунд
up 
Ответ:
продаю 77  казахстан моб картел 
Есть 120 линий (GSM). 
Прийму качественный трафик, 
skype:sky.maling

Добавлено через 15 секунд
up 
Вопрос: Активность UIView

вот до чего добрался.  Изчезает активность у окон (UIView).  Есть, например, View_A из него вызывается другой (View_B), но когда из View_B опять вызываем View_A, все поля на нём (UITextView, UITextField) неактивны.  Т.е. - как-то (программно) содержание в них изменить можно, но на поползновения извне реакции никакой (не выезжает виртуальная клавиатура).

В чём дело быть может?  Неправильный переход между окнами?
Ответ:
а вы переходите из view в view? тогда да, неправильный
Вопрос: Ошибка provisioning profile

Здравствуйте.
Сегодня я попытался освоить публикацию своего первого приложения.
Столкнулся с ошибкой: "No matching provisioning profile found: Your build settings specify a provisioning profile with the UUID"
Весь день бился и никак не выходит.
Подскажите, может кто сталкивался с подобным?

детали:
Лицензия на год оплачена.
Я сделал запрос на сертификат и получил 2 сертификата *.cer для разработки и распространения. (Сохранил, добавил)
Добавил на сайт свой девайс.
Добавил идентификатор своего приложения в AppIDs.
В provisioning profiles добавил 2 профиля: разработчика и распространителя.
Двойным кликом добавил оба в XCode.
В XCode - Настройках аккаунта нажал кнопку загрузки всех файлов профилей.
На сайте скачал "IOS Team..."-профиль и тоже двойным кликом добавил в XCode.
Затем в проекте "Code signing" в 2-х строчках для Дебага проставил профиль разработчика,
и в 2-х строчках для Релиза проставил профиль распространителя.
Ниже, в "provisioning profile" установил "IOS Team..."-профиль.

Compile Clean работает.
Но Архивация и Анализ выдают ошибку:
Code Sign error: No matching provisioning profile found: Your build settings specify a provisioning profile with the UUID “ля-ля-ля”, however, no such provisioning profile was found.

Тут же предлагает исправить.
Результат исправления - обнуление всех полей "Code signing", и успешная компиляция и запуск.
----------------

Пробовал пересоздавать файлы профиля. Не помогает.
Даже сменил "Bundle Identifier" у приложения, и сделал все заново от создания идентификатора в AppIDs.
Не помогает.

Спасите! Помогите!!!

Добавлено через 14 часов 2 минуты
В очередной раз пвторил процедуру описанную выше - заработало.
Так и не понял в чем моя ошибка.
Ответ: ну обычно стоит смотреть в Build Settings -> Code Signing секцию
там есть такие поля, как Code Signing Identity и Provisioning Profile, там и смотрите, чтобы ваш профиль подходил

еще есть одно место, куда стоит смотреть, это в случае если вы состоите в нескольких группах разработчиков, это - таргет проекта -> General -> Team

еще зайдите в Xcode -> Preferences -> Accounts -> ваш акаунт -> выберите вашу команду, кликните дважды и скачайте все провижн профайлы

тяжело просто так сходу сказать, в чем именно проблема