Единственный способ, которым я могу придумать, вне головы - это следующее (завернуто в консольное приложение для тестирования):
class Program
{
static void Main(string[] args)
{
var x = new MyClass<string>() { Value = "34" };
var y = new MyClass<int>() { Value = 3 };
var list = new List<IMyClass>();
list.Add(x);
list.Add(y);
foreach (var item in list)
{
Console.WriteLine(item.GetValue);
}
}
private interface IMyClass
{
object GetValue { get; }
}
private class MyClass<T> : IMyClass
{
public T Value;
public object GetValue
{
get
{
return Value;
}
}
}
}
, т.е. Пусть MyClass реализует пустой интерфейс, а затем создает ваши коллекции в виде экземпляров классов, которые реализуют этот интерфейс.
Обновление: Я добавил метод «GetValue» в интерфейс, который позволяет вам получить доступ к «Значение» экземпляра MyClass как объекта. Насколько это возможно, если вы хотите иметь коллекцию, содержащую смешанные типы.
Из руководства Apple по программированию контроллера View для iOS :
«Самая важная роль контроллера представления - управлять иерархией представлений. Каждый контроллер представления имеет единственное корневое представление, которое включает в себя все содержимое контроллера представления. К этому корневому представлению вы добавляете представления, необходимые для отображения вашего контента. "
Также:
"
Это отличный вопрос.
Мое основное практическое правило. Разве каждая основная «страница» приложения получает собственный контроллер представления. Под этим я подразумеваю то, что на этапе создания каркаса при проектировании приложения все, что существует как отдельная сущность, в конечном итоге будет управляться собственным контроллером представления. Если есть модальный экран, который скользит по существующему экрану, я буду считать его отдельной «страницей» и предоставлю ему собственный контроллер представления. Если есть представление, которое перекрывает и существующую страницу (например, экран загрузки или всплывающее окно справки). Я бы относился к ним по-другому, реализовал их как подклассы UIView и сохранил логику в этом контроллере представления «страниц». Если всплывающее окно имеет поведение, я сообщу обратно этим страницам View Controller, используя шаблон делегата.
Надеюсь, это поможет.
Я использую UIViewController всякий раз, когда представление является полноэкранным и имеет выходы / действия и / или подпредставления.
У меня есть несколько другой подход:
Переопределите UIView, если вы планируете выполнять пользовательское рисование в drawRect. В противном случае создайте подкласс UIViewController и используйте [self.view addSubview: blah] для добавления компонентов страницы.
Есть несколько других особых случаев, но это обрабатывает около 95% ситуаций.
(Вы все равно будете часто требуется UIViewController с настраиваемым UIView. Но обычно используется настраиваемый UIViewController без соответствующего настраиваемого UIView.)
Является ли то, что скользит, на автономном экране? Я имею в виду, он напрямую взаимодействует с родителем? Если это так, сделайте его UIView
, если нет, возможно, порекомендуйте UIViewController
.
UIView является частью UIViewController, для этого см. Свойство view UIViewController. Как вы правильно указали, UIViewController управляет полным экраном, и одновременно должен быть только один видимый UIViewController. Но в большинстве случаев у вас будет больше UIViews или подклассов UIView, видимых на экране.
В большинстве случаев приведенный вами пример будет правильным использованием. Как вы могли заметить, вы получите много функциональных возможностей при создании подкласса UIViewController. Одной из них была бы анимация появления и закрытия UIViewController.
Как заметил Марк, если то, что вы хотите вставить, не является автономным экраном, вам лучше использовать UIView.
В заключение я бы сказал, что если вы хотите использовать функциональность, которая идет с подклассом UIViewController, то сделайте его UIViewController. В противном случае UIView мог бы быть лучше.
В классе itunes U Standford есть отличная лекция по UIViewControllers, я бы рекомендовал ее посмотреть, потому что в нем много информации о UIViewControllers в целом.
Поместите все на экране в UIViewController, пока контроллер представления не станет содержать слишком много кода, затем разбейте экран на несколько UIViewController, содержащихся в одном главном контроллере представления ...
Чтобы поместите это в контекст своего ответа, создайте контроллер представления для этого модального наложения. Он все равно будет иметь его, если вы используете навигационный контроллер для его представления (а вам, вероятно, следует).