Форум программистов, компьютерный форум, киберфорум
Наши страницы

Xamarin

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
#1

Xamarin & UITableViewCell - Xamarin

20.08.2013, 11:54. Просмотров 1259. Ответов 5
Метки нет (Все метки)

Доброго времени суток. Вопросик возник у меня есть класс таблицы с методом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public override UITableViewCell GetCell(UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
        {
            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 = tableItems[indexPath.Row];
            cell.TextLabel.Lines = 0;
            cell.TextLabel.LineBreakMode = UILineBreakMode.WordWrap ;
 
            return cell;
        }
и есть другой класс где на вьюхе размещена еще таблица мне нужно чтобы при переключении switch менялся текст в таблице вот код :
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
//Switcher Approve / Don't Approve
        public void switchApproveDontApprove()
        {
            tbs = new TableSource ();
            UILabel myText = new UILabel (new RectangleF (100, 325, 135, 20));
            myText.Text = "Don't Approve";
            Console.WriteLine("FlagApprove = " + flagApprove.ToString());
            myText.BackgroundColor = UIColor.White;
 
            UISwitch mySwitch = new UISwitch(new RectangleF(10, 325, 20, 50));
            mySwitch.ThumbTintColor = UIColor.White;
            mySwitch.OnTintColor = UIColor.Green;
            mySwitch.TintColor = UIColor.Red;
            mySwitch.TouchUpInside += (object sender, EventArgs e) => {
                if(mySwitch.On) {
                    flagApprove = true;
                    myText.Text = "Approve";
                    tbs.cell.TextLabel.TextColor = UIColor.Green;// FAIL вываливается ошибка
                    Console.WriteLine("flagApprove = " + flagApprove.ToString());
                }else{
                    flagApprove = false;
                    myText.Text = "Don't Approve";
                    tbs.cell.TextLabel.TextColor = UIColor.Red;// FAIL тут тоже вываливается ошибка
                    Console.WriteLine("flagApprove = " + flagApprove.ToString());
                }
            };
            View.AddSubview (mySwitch);
            View.AddSubview (myText);
        }
но проблема в том что при переключении switch вываливается ошибка "Object reference not set to an instance of an object". Не могу понять в чем проблема( Заранее спасибо за помощь

Добавлено через 34 минуты
инициализировал cell
C#
1
tbs.cell = new UITableViewCell ();
) теперь ошибка не вываливается, но текст почему то все равно черный
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2013, 11:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Xamarin & UITableViewCell (Xamarin):

Xamarin & UIButton - Xamarin
Всем доброго времени суток. Вопрос состоит в том что у меня есть кнопка у нее два состояния InActive/Active. Когда она не активна на ней...

Ошибка при запуске приложения для Android в Visual Studio&Xamarin - Xamarin
Invalid argument: cannot open transport registration socketpair List of devices attached * daemon not running. starting it now on port 5037...

FM or Xamarin - Xamarin
Не знал куда правильнее написать, если что перенесите Есть небольшой опыт работы с Delphi и C# Хочется попробовать написать несколько...

Xamarin Android - Xamarin
Подскажите где можно достать руководство по Xamarin, подробное описание элементов управления (ButtonЫ, textView...)

Установка Xamarin - Xamarin
В двух словах, есть: 1) VS 2008 2) vstoolforxamarin.exe Подскажите, как установить, или подскажите какой-нибудь источник, где это...

Прожорливый xamarin - Xamarin
решил попробовать это чудо техники. Первое что пораздражало - отдельно от VS качается только .dmg инсталлер, никакого тебе exe установщика....

5
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
20.08.2013, 12:12 #2
У вас есть видение то к каким вы экземплярам класса обращаетесь?
Я вот вижу из ваших слов, что дело выглядит так:
У меня есть A, B и я использую C на D, при этом A не меняется. Так и не должно. Они не связаны.

А вообще вы очень плохо описали проблему. Выводы сделать очень сложно. Либо нормально опишите всё, либо выкладывайте код весь, а не кусками.
1
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
20.08.2013, 14:37  [ТС] #3
вот класс History Screen
Кликните здесь для просмотра всего текста

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
namespace testiOS
{
    public class TableSource : UITableViewSource
    {
        string[] tableItems;
        string cellIdentifier = "TableCell";
        public UITableViewCell cell;
        PostScreen postScreen = new PostScreen ();
 
        public TableSource(string[] items)
        {
            tableItems = items;
        }
 
        public override int RowsInSection(UITableView tableView, int section)
        {
            return tableItems.Length;
        }
 
        public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
        {
            new UIAlertView("Row Selected", tableItems[indexPath.Row], null, "OK", null).Show();
            tableView.DeselectRow (indexPath, true); // normal iOS behaviour is to remove the blue highlight
        }
 
        public override UITableViewCell GetCell(UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
        {
            postScreen = new PostScreen ();
            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 = tableItems[indexPath.Row];
                cell.TextLabel.Lines = 0;
                cell.TextLabel.LineBreakMode = UILineBreakMode.WordWrap ;
            if (postScreen.flagApprove == true) {
                cell.TextLabel.TextColor = UIColor.Red;
                Console.WriteLine ("HSflagApprove = " + postScreen.flagApprove.ToString());
            } else {
                Console.WriteLine ("HSflagApprove = "  + postScreen.flagApprove.ToString());
            }
 
                return cell;
        }
    }
 
    public partial class HistoryScreen : UIViewController
    {
        public HistoryScreen () : base ("HistoryScreen", null)
        {
            this.Title = "Hstory";
        }
 
        public override void DidReceiveMemoryWarning ()
        {
            // Releases the view if it doesn't have a superview.
            base.DidReceiveMemoryWarning ();
            // Release any cached data, images, etc that aren't in use.
        }
 
        public void myTable()
        {
            UITableView table;
 
 
            table = new UITableView(View.Bounds); // defaults to Plain style
            string[] tableItems = new string[] {
                "Vegetables",
                "Fruits",
                "Flower Buds",
                "Legumes",
                "Bulbs",
                "Tubers",
                "Vegetables2",
                "Fruits2",
                "Flower Buds2",
                "Legumes2",
                "Bulbs2",
                "Tubers2",
                "Vegetables3",
                "Fruits3",
                "Flower Buds3",
                "Legumes3",
                "Bulbs3",
                "Tubers3"
            };
            table.Source = new TableSource (tableItems);
            Add (table);
        }
 
 
 
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();
            myTable ();
 
            //switchApproveDontApprove ();
            // Perform any additional setup after loading the view, typically from a nib.
        }
    }
}


а это PostScreen
Кликните здесь для просмотра всего текста

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Collections.Generic;
 
namespace testiOS
{
    public partial class PostScreen : UIViewController
    {
        bool flagFacebook = false, flagTwitter = false, flagLinkedIn = false;
        List<string> comment_views = new List<string>();
        public bool flagApprove;
    
        public PostScreen () : base ("PostScreen", null)
        {
            this.Title = "Approve";
        }
 
        public override void DidReceiveMemoryWarning ()
        {
            // Releases the view if it doesn't have a superview.
            base.DidReceiveMemoryWarning ();
            // Release any cached data, images, etc that aren't in use.
        }
 
        public void btnClickFB()
        {
            //Default Image Facebook
            btnFaceBook.SetImage (UIImage.FromFile ("facebook_inactive_256x256.png"), UIControlState.Normal);
            btnFaceBook.TouchUpInside += (object sender, EventArgs e) => {
                if (flagFacebook) {
                    flagFacebook = false;
                    btnFaceBook.SetImage (UIImage.FromFile ("facebook_inactive_256x256.png"), UIControlState.Normal);
                    } else {
                    btnFaceBook.SetImage (UIImage.FromFile ("facebook_active_256x256.png"), UIControlState.Normal);
                    flagFacebook = true;
                }
            };
        }
 
        public void btnClickTW()
        {
            //Default Image Twitter
            btnTwitter.SetImage (UIImage.FromFile ("twitter_inactive_256x256.png"), UIControlState.Normal);
            btnTwitter.TouchUpInside += (object sender, EventArgs e) => {
                if (flagTwitter) {
                    flagTwitter = false;
                    btnTwitter.SetImage (UIImage.FromFile ("twitter_inactive_256x256.png"), UIControlState.Normal);
                } else {
                    btnTwitter.SetImage (UIImage.FromFile ("twitter_active_256x256.png"), UIControlState.Normal);
                    flagTwitter = true;
                }
            };
        }
 
        public void btnClickLI()
        {
            //Default Image LinkedIn
            btnLinkedIn.SetImage (UIImage.FromFile ("linkedin_inactive_256x256.png"), UIControlState.Normal);
            btnLinkedIn.TouchUpInside += (object sender, EventArgs e) => {
                if (flagLinkedIn) {
                    flagLinkedIn = false;
                    btnLinkedIn.SetImage (UIImage.FromFile ("linkedin_inactive_256x256.png"), UIControlState.Normal);
                } else {
                    btnLinkedIn.SetImage (UIImage.FromFile ("linkedin_active.png"), UIControlState.Normal);
                    flagLinkedIn = true;
                }
            };
        }
 
        //Incoming Message(Posting App)
        public void incomingMessage()
        {
            UILabel postMessage = new UILabel (new RectangleF (15, 5, 742, 150));
            postMessage.BackgroundColor = UIColor.White;
            View.AddSubview (postMessage);
        }
 
        //Switcher Approve / Don't Approve
        public void switchApproveDontApprove()
        {
            UILabel myText = new UILabel (new RectangleF (100, 325, 135, 20));
            myText.Text = "Don't Approve";
            Console.WriteLine("FlagApprove = " + flagApprove.ToString());
            myText.BackgroundColor = UIColor.White;
 
            UISwitch mySwitch = new UISwitch(new RectangleF(10, 325, 20, 50));
            mySwitch.ThumbTintColor = UIColor.White;
            mySwitch.OnTintColor = UIColor.Green;
            mySwitch.TintColor = UIColor.Red;
 
            mySwitch.TouchUpInside += (object sender, EventArgs e) => {
                if(mySwitch.On) {
                    flagApprove = true;
                    myText.Text = "Approve";
                    Console.WriteLine("PSflagApprove = " + flagApprove.ToString());
                }else{
                    flagApprove = false;
                    myText.Text = "Don't Approve";
                    Console.WriteLine("PSflagApprove = " + flagApprove.ToString());
                }
            };
            View.AddSubview (mySwitch);
            View.AddSubview (myText);
        }
 
        //Add Comment
        public void AddCommentMessage()
        {
            string myUser;
            string myMessage;
 
            myUser = new NSUserDefaults ().StringForKey ("userName");
            myMessage = postView.Text;
 
            comment_views.Add (myUser + "\n" + DateTime.Now.ToString () + "\n" + myMessage);
 
            cellComment.Source = new TableSource(comment_views.ToArray());
        }
 
        //Loading Avatar Image
        public void loadAvatar()
        {
            UIImageView avatar = new UIImageView (UIImage.FromFile("avatar.jpg"));
            avatar.Frame = new RectangleF (650, 290, avatar.Image.CGImage.Width, avatar.Image.CGImage.Height);
            View.AddSubview (avatar);
        }
 
        public override void ViewDidLoad ()
        {
            View.BackgroundColor = UIColor.White;
            //tbs.cell = new UITableViewCell ();
 
            incomingMessage ();
            switchApproveDontApprove ();
 
            base.ViewDidLoad ();
            // Perform any additional setup after loading the view, typically from a nib.
            postView.Layer.BorderWidth = 0.5f;
 
            btnClickFB();
            btnClickTW();
            btnClickLI();
 
            loadAvatar ();
 
            // Comment Setting
            btnComment.AddGestureRecognizer(new UILongPressGestureRecognizer());
            var tapRecognizerComment = new UITapGestureRecognizer();
            tapRecognizerComment.AddTarget(() =>
                                          {
                AddCommentMessage();
                cellComment.ReloadData();
                //method
            });
            tapRecognizerComment.NumberOfTapsRequired = 1;
            this.btnComment.AddGestureRecognizer(tapRecognizerComment); 
        }
    }
}


Добавлено через 1 минуту
на форме PostScreen создается uiswitch ввели что то в текстовое поле переключили switch он выводит в таблицу цвет красный переключили еще раз он выводит в таблицу этот же текст, но зеленым)

Добавлено через 2 часа 18 минут
сделал) но есть вопросик как указать "изменить цвет текста у определенной ячейки"? у UITableViewCell
0
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.08.2013, 07:22 #4
Цитата Сообщение от Auron Посмотреть сообщение
сделал) но есть вопросик как указать "изменить цвет текста у определенной ячейки"? у UITableViewCell
У cell есть textLabel.
А у textLabel есть проперти
1
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
21.08.2013, 11:02  [ТС] #5
я и меняю цвет текста TextColor. просто если меняется цвет то у всех сразу, а мне нужно к примеру сменить цвет у определенной ячейки куда я добавляю текст. Т.е. я ввел текст в switch выставил On (цвет зеленый) нажал кнопку "Добавить" он добавил текст с зеленым цветом, потом я написал еще какой то текст в switch выставил Off (цвет красный) нажал кнопку "Добавить" он добавил текст с красным цветом)
0
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
22.08.2013, 06:14 #6
Сохраняйте значение switch в модель(ну или на крайний случай просто массив BOOL для всех switch). И в методе перезагрузки cell в зависимости от того, что по индексу для данного indexPath.row в Вашем массиве ставьте и значение switch, и значение цвета.
А еще читайте документацию. Будет меньше подобных вопросов. И бросайте этот Xamarin. :/
1
22.08.2013, 06:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 06:14
Привет! Вот еще темы с ответами:

New Xamarin Studio - Xamarin
Кто-нибудь использовал новую Xamarin Studio для Android проектов какие впечатления? http://blog.xamarin.com/announcing-xamarin-2.0/ ...

Xamarin разработчик - Xamarin
Привет. Ищу разработчика знаюего Xamarin для разработки кросс платформенного приложения на iOS, Android ТЗ вышлю исполнителю...

Разработчики Xamarin - Xamarin
Добрый день, есть идеи Старт-Ап (есть уже рабочие решения в Рунете). Нужен программист хорошо разбирающийся в Xamarin.Forms и возможно...

Не устанавливается Xamarin - Xamarin
У меня на компьютере установлен Visual Studio 2015 Express for Desktop. Скачивал xamarin c официального сайта, во время установки никаких...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru